2016-01-14 61 views
0

我有幾個包含相同表名和結構的數據庫。我需要能夠執行一個簡單的T-SQL,它可以針對每個T-SQL運行,我希望使用變量填充FROM子句中的數據庫名稱。我可以這樣做還是有更好的方法?T-SQL語句的動態數據庫名稱FROM子句

下面是一個代碼示例,它不起作用,但應該舉例說明我正在嘗試做什麼。

DECLARE @dbn sysname; 

SET @dbn = 'EDIT' 

select sde_id, owner, direct_connect, nodename + ':' + sysname "nodename:sysname", start_time 
    FROM **[@dbn]**.[SDE].[SDE_process_information] 
+0

看看動態查詢。 –

回答

0

您的查詢不清楚,所有混亂,但您需要按照下面的代碼中的方法。在這種方法中,您需要首先根據您的案例中的數據庫名稱等變量創建查詢,然後使用sp_executesql執行生成的查詢。

DECLARE @dbn nvarchar(1000); 

SET @dbn = N'EDIT'; 

declare @qry nvarchar(max); 

set @qry = N'select sde_id, owner, direct_connect, nodename ,sysname , start_time 
    FROM ' + @dbn + N'.[SDE].[SDE_process_information]'; 

execute sp_executesql @qry; 
+0

不那麼不清楚和混亂起來,讓你無法理解我想要完成的事情:-) 感謝您的幫助。答案讓我到了需要的地方。 – Woody

+0

是的,我只是想盡可能多地去解釋這個方法,但是很高興它有幫助。 – Sunil

0

您可能會使用動態sql。同時,你想負責任地使用它。

如果您有參與計劃重用的參數,您應該將它們集成在一起。

這裏是一個通用羅斯文(微軟樣品分貝)例如:

動態SQL是福和詛咒。不要爲此發瘋。請其他開發者乞求你。

看到這個還有:http://sqlmag.com/database-performance-tuning/don-t-fear-dynamic-sql

「我不能強調計劃重用足夠的這些天太 許多新的發展努力利用框架,對T的 特設建築中心的重要性。 -SQL語句作爲非參數化批處理提交給數據庫 引擎。雖然這可能會使 開發工作稍微容易一些,但它會對數據庫性能和可伸縮性產生負面影響。「

DECLARE @SQL NVARCHAR(500), @DatabaseName NVARCHAR(100), @Schema NVARCHAR(128), 
@Table NVARCHAR(128), @OrderID INT, @EmployeeID INT ; 
SET @DatabaseName = 'Northwind'; -- 'NorthwindPartial' 
SET @Schema = 'dbo' 
SET @Table = 'Employees' ; 
SET @EmployeeID = 3 ; 

select 'below probably does plan-reuse' 
SET @SQL = 'SELECT EmployeeId ' + ' FROM ' + @DatabaseName + '.' + @Schema + '.' + @Table + ' WHERE EmployeeID > @P1' ; 
select @sql as sp_executesqlStatement 
EXEC sp_executesql @SQL, N'@P1 INT', @P1 = @EmployeeID ; 

GO