我正在尝试编写查询以查找具有特定列且具有某些特定值的所有表。这是我迄今为止所做的 -
EXEC sp_MSforeachtable
@command1='
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=PARSENAME("?",2) AND TABLE_NAME=PARSENAME("?",1) AND COLUMN_NAME="EMP_CODE")
BEGIN
IF (SELECT COUNT(*) FROM ? WHERE EMP_CODE="HO081")>0
BEGIN
SELECT * FROM ? WHERE EMP_CODE="HO081"
END
END
'
我希望我的意图很清楚,我只想选择那些存在 EMP_CODE
列的表,然后在这些表中选取那些 EMP_CODE='HO081'
的行。
编辑 -
现在是这样的。但我无法在查询中替换 @EMPCODE
变量。
DECLARE @EMPCODE AS VARCHAR(20)
SET @EMPCODE='HO081'
EXEC sp_MSforeachtable
@command1='
DECLARE @COUNT AS INT
SELECT @COUNT=COUNT(*) FROM ? WHERE EMP_CODE='''+@EMPCODE+'''
IF @COUNT>0
BEGIN
PRINT PARSENAME("?",1)+'' => ''+CONVERT(VARCHAR,@COUNT)+'' ROW(S)''
--PRINT ''DELETE FROM ''+PARSENAME("?",1)+'' WHERE EMP_CODE='''''+@EMPCODE+'''''''
END
',@whereand='AND O.ID IN (SELECT OBJECT_ID FROM SYS.COLUMNS C WHERE C.NAME='''+@EMPCODE+''')'
IF (SELECT COUNT(*) FROM ? WHERE EMP_CODE='''+@EMPCODE+''')>0
,为什么会提示“附近有错误的语法”?我试图通过变量传递EMP_CODE
的值。 - Soham DasguptaCOUNT
- 运行SELECT
(根据您的原始问题)或DELETE
(根据您的更新)是完全可以的,它实际上不会影响任何行。首先执行COUNT
是多余的,可能会导致查询需要更长时间才能执行。 - Damien_The_Unbeliever