您好我正在嘗試運行下面的SQL,它將通過遍歷所有名稱爲「Pull」的數據庫來提取名爲SourceDestination的表名。sp_executesql中的語法錯誤
但是我在'[email protected]_name+'.sys.tables附近的加號出現錯誤。我在兩邊嘗試了N',但我似乎無法讓它工作。
它給出了這個錯誤 Msg 102,Level 15,State 1,Line 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
非常感謝!現在沒有引發語法錯誤。但我還有一個問題。遊標返回兩個數據庫名稱,但sys.tables上的查詢僅適用於返回的第一個數據庫名稱。對於第二個DB名稱,返回前一個DB本身的結果。我添加了一個調試,它顯示@db_name變量包含每個迭代的每個數據庫的名稱,但兩個數據庫名稱的結果相同。 – JunaidKirkire 2012-04-15 13:04:04
@JunaidKirkire - 將查詢寫入(假設表中的'SourceDestinations'出現在兩個數據庫中),您將得到兩個查詢相同的結果。請修改問題以更新您的當前查詢,並更詳細地描述您要實現的內容。 – 2012-04-15 13:33:52
表格SourceDestinations不存在於第二個數據庫中。它仍然顯示db_name的第二個值。在sys.tables上運行查詢之前,我做了'use'+ db_name。儘管如此,表格'SourceDestinations'被返回。 我以調試模式運行查詢,只是爲了確保db_name具有第二個數據庫的名稱。 我想要實現的是遍歷所有在其名稱中具有'Pull'並查詢某些表的數據庫。 但是,它似乎只有第一個數據庫被查詢。 – JunaidKirkire 2012-04-15 14:02:16