我正在运行以下代码以从具有特定列的所有表中提取所有相关行。外部IF
应该检查该列是否存在于该迭代的表中。如果不是,它应该完成该迭代并移动到下一个表。如果表有该GCRecord
列,那么它应该检查该表是否会返回任何记录。如果没有要返回的记录,它应该结束该迭代并移动到下一个表。如果有记录,它应该在 SSMS 中显示它们。
USE WS_Live
EXECUTE sp_MSforeachtable
'
USE WS_Live
IF EXISTS( SELECT *
FROM sys.columns
WHERE columns.Object_ID = Object_ID(''?'')
AND Name = ''GCRecord''
)
BEGIN
IF EXISTS (SELECT * FROM ? WHERE GCRecord IS NOT NULL)
BEGIN
SELECT * FROM ? WHERE GCRecord IS NOT NULL
END
END
'
它似乎有效,因为 SSMS 只返回具有有效条目的网格。我不明白的是:为什么我仍然收到这些错误?
Msg 207, Level 16, State 1, Line 10
Invalid column name 'GCRecord'.
Msg 207, Level 16, State 1, Line 13
Invalid column name 'GCRecord'.
编辑
使用建议后,我有这个:
USE WS_Live
EXECUTE sp_MSforeachtable
'
USE WS_Live
IF EXISTS(SELECT * FROM sys.columns WHERE columns.Object_ID = Object_ID(''?'')AND Name = ''GCRecord'')
BEGIN
IF EXISTS (SELECT * FROM ? WHERE GCRecord IS NOT NULL)
BEGIN
EXEC('' SELECT * FROM ? WHERE GCRecord IS NOT NULL'')
END
END
'
返回此错误:
Msg 207, Level 16, State 1, Line 7
Invalid column name 'GCRecord'.
指的是这条线
IF EXISTS(SELECT * FROM sys.columns WHERE columns.Object_ID = Object_ID(''?'')AND Name = ''GCRecord'')
更新
EXEC
我尝试了不起作用的嵌套语句,但使用选定的答案我得到了我正在寻找的结果而没有错误。