1

テーブル名とデータベース名が異なる2つのテーブルからカーソルを使用して収集するストアドプロシージャを作成しました。
しかし、私の問題は、クエリを実行してテーブルがデータベースに存在するかどうかを確認し、エラーを表示することです。では、クエリを実行して出力を変数に格納するにはどうすればよいですか?

Declare @table_exist nvarchar(200),@val1 nvarchar(200),@return1 nvarchar(200);
  SET @table_exist= 
    'SELECT 1 FROM '+@db_name+'.sys.tables 
    where name='+@table_name+'';
  EXEC sp_executesql @table_exist,@return1 OUTPUT;  
  select @return1;  

エラー:

Invalid column name 'table name'
4

2 に答える 2

2

動的クエリを作成するときは、 quotenameを使用する必要があります。

   SET @table_exist= 
     'SELECT 1 FROM '+ quotename(@db_name)+'.sys.tables 
     where name='+quotename(@table_name)+'';

このようなエラーに直面したときprint @table_existsは、実際に何が構築されているかを確認するのが最善です。

私はあなたの質問をきちんと見ていません。アポストロフィがありません:

   SET @table_exist= 
     'SELECT 1 FROM '+ quotename(@db_name)+'.sys.tables 
     where name=''' + @table_name +'''';

アップデート:

出力変数を使用する場合は、クエリで設定する必要があります。

  SET @table_exist= 
    'SELECT @return1 = 1 FROM ' + quotename(@db_name) + '.sys.tables 
    where name='''+@table_name+'''';

結果セットがクライアントに返されないようにするには、一時テーブルを作成し、そこに結果セットを挿入します。この場合、結果セットは 1 つだけ残ります。結果は次のselect @return1とおりです。

  declare @tbl table (exist bit)
  insert into @tbl
  EXEC sp_executesql @table_exist, N'@return1 nvarchar(200) out', @return1 OUT;
  select @return1;
于 2012-05-28T12:54:55.327 に答える
1

' を使用して"適切にクエリを作成することをお勧めします。これにより、クエリを作成する際のミスが少なくなります。

コードのエラーは、を使用するだけで混乱することです''変数にのみ使用するのが最適です。

コードを次のように記述します。

"SELECT 1 FROM  ' "+@db_name+" '.sys.tables 
    where name=' "+@table_name+" ' ";
于 2012-05-28T15:28:03.130 に答える