次のコードを実行して、特定の列を持つすべてのテーブルから関連するすべての行を抽出しています。外側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
しましたが、選択した回答を使用して、エラーなしで探していた結果が得られました。