1

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

4

4 に答える 4

2

あなたはとても近くにいます。「EXEC」を使用

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
        EXEC(''SELECT * FROM ? WHERE GCRecord IS NOT NULL'')
    END
'
于 2014-10-22T19:34:11.633 に答える
0

@whereand を使用して簡素化します。

exec sp_MSforeachtable 
@command1='select * from ? where GCRecord is not null', 
@whereand='and exists(select 1 from sys.columns c where c.object_id = o.id 
                      and c.name = ''GCRecord'')' 
于 2016-09-15T14:57:14.470 に答える