所以我有一個SQL Server正在運行,並且我有兩個數據庫,第一個數據庫存儲第二個數據庫的名稱。在第一個數據庫中,我希望創建一個在第二個表修改數據的聲明中,沿着線的東西:如何基於不同數據庫中的值訪問數據庫? (TSQL)
(這是從第一個數據庫查詢)
select * from [select database_name from table1].table
我一直在玩弄與系統。關鍵字試圖找出我是否可以做到這一點,但沒有運氣。任何幫助將不勝感激,謝謝。
所以我有一個SQL Server正在運行,並且我有兩個數據庫,第一個數據庫存儲第二個數據庫的名稱。在第一個數據庫中,我希望創建一個在第二個表修改數據的聲明中,沿着線的東西:如何基於不同數據庫中的值訪問數據庫? (TSQL)
(這是從第一個數據庫查詢)
select * from [select database_name from table1].table
我一直在玩弄與系統。關鍵字試圖找出我是否可以做到這一點,但沒有運氣。任何幫助將不勝感激,謝謝。
您必須構建一個字符串並將其作爲動態SQL執行。請參閱:The Curse and Blessings of Dynamic SQL
declare @database_name sysname
select @database_name = database_name from Table1
declare @sql nvarchar(1000)
set @sql = N'select * from ' + @database_name + N'.SchemaName.TableName'
exec sp_executesql @sql
感謝您的參考!愛標題:) – 2011-03-14 19:51:50
你可以做到這一點只能通過執行這樣的動態查詢:
DECLARE @base varchar(30)
SELECT @base = "yourOtherBase"
EXECUTE ("select * from " + @base + "..table");
感謝您的信息,這完美的工作! – 2011-03-14 19:54:16
的一種方法是建立一些動態SQL,沿着線:
DECLARE @Command varchar(1000)
SELECT @Command = replace('select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name)
from table1
where [your criteria here]
EXECUTE (@Command)
另一種方法是創建引用「目標」數據庫的視圖(或同義詞或鏈接的服務器定義),例如
DECLARE @Command varchar(1000)
SELECT @Command = replace('CREATE VIEW SomeView AS select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name)
from table1
where [your criteria here]
EXECUTE (@Command)
這將創建一個可以被永久(即非動態)代碼引用的視圖。如果目標數據庫頻繁更改,或者您擁有大量目標數據庫,則這種方法效果不佳。
但說實話,真正的答案是不,你不能輕易做到這一點,而且你應該盡力避免必須這樣做的情況。相信我,這可能是一個調試和維護的噩夢。
@Joe是對的,如果你這樣去使用'sp_executeSQL'。 – 2011-03-14 19:53:13
如果您發佈代碼,XML或數據示例,請在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以便對其進行精確格式化和語法突出顯示! – 2011-03-14 19:49:44