こんにちは私は、名前が 'プル'を持つすべてのデータベースを反復処理することにより、SourceDestinationという名前のテーブル名を引き出す次のSQLを実行しようとしています。sp_executesqlの構文エラー
しかし、プラス記号「[email protected]_name+」.sys.tablesの近くにエラーが表示されています。私は両側でN ''を試しましたが、うまく動作しないようです。
このエラーが発生します。 メッセージレベル102、レベル15、状態1、行20 '+'の近くの構文が正しくありません。
私が間違っている場所を知る必要があります。助けてくれてありがとう。
declare db_names cursor for
select name
from master.sys.databases
where name like 'Pull_%'
declare @db_name varchar(50)
declare @table_name varchar(50)
declare @sql nvarchar(100)
DECLARE @ParmDefinition NVARCHAR(500);
open db_names
fetch next from db_names into @db_name
while @@FETCH_STATUS = 0
begin
print @db_name
-- set @sql = 'select '[email protected]_name+'=name from '[email protected]_name+'.sys.tables'
-- set @sql = N'select @table_name=name from @db_name.sys.tables where name = ''SourceDestinations'' '
execute sp_executesql N'select @tbl_name=name from '[email protected]_name+'.sys.tables where name = ''SourceDestinations'' ', N'@tbl_name varchar(50) OUTPUT', @[email protected]_name OUTPUT
--exec(@sql)o
print @table_name
FETCH NEXT FROM db_names INTO @db_name
end
close db_names
deallocate db_names
ありがとうございました!現在、構文エラーは発生していません。しかしもう一つ問題があります。カーソルは2つのDB名を返しますが、sys.tablesのクエリは返された最初のDB名に対してのみ機能します。 2番目のDB名については、前のDB自体の結果が返されます。私はデバッグを追加し、@ db_name変数が各反復ごとに各DBの名前を保持するが、両方のDB名の結果が同じになることを示しています。 – JunaidKirkire
@JunaidKirkire - ( 'SourceDestinations'テーブルが両方のデータベースにあると仮定して)書かれたクエリでは、両方のクエリで同じ結果が得られます。質問を編集して、現在のクエリと達成しようとしていることの詳細な説明を更新してください。 –
テーブルSourceDestinationsは、2番目のDBに存在しません。それでもdb_nameの2番目の値が表示されます。 sys.tablesでクエリを実行する前に、 'use' + db_nameを実行しました。それを念頭において、テーブル 'SourceDestinations'が返されます。 私はdb_nameに2番目のDBの名前があることを確認するために、デバッグモードでクエリを実行しました。 私が達成しようとしているのは、名前に「プル」を持ち、特定のテーブルをクエリするすべてのデータベースを反復処理することです。 しかし、最初のデータベースだけが照会されているようです。 – JunaidKirkire