我在master
數據庫中創建了一個存儲過程,因爲我希望能夠在各種數據庫上運行。在SQL Server存儲過程中使用變量
我爲database
創建了一個變量,所以當我執行存儲過程時,它將運行在我想要的那個上。我不斷收到此語法錯誤:
Msg 102, Level 15, State 1, Procedure Stuck_Docs_WF_Rpt, Line 12
Incorrect syntax near '.'.
這裏是我的代碼:
ALTER PROCEDURE [dbo].[Stuck_Docs_WF_Rpt]
@Database char(25)
AS
BEGIN
select
count(@Database.hsi.itemdata.itemnum) as 'Doc(s) Stuck',
@Database.hsi.lcstate.statename as 'Queue',
@Database.hsi.lifecycle.lifecyclename as 'Lifecycle'
from
@Database.hsi.itemdata
join
@Database.hsi.itemlc on @Database.hsi.itemdata.itemnum = @Database.hsi.itemlc.itemnum
join
@Database.hsi.lcstate on @Database.hsi.itemlc.statenum =
@Database.hsi.lcstate.statenum
join
@Database.hsi.lifecycle on @Database.hsi.itemlc.lcnum = @Database.hsi.lifecycle.lcnum
where
@Database.hsi.itemdata.itemnum = @Database.hsi.itemlc.itemnum
and @Database.hsi.lcstate.statenum = @Database.hsi.itemlc.statenum
and @Database.hsi.lcstate.statename Like '%Route' or @Database.hsi.lcstate.statename like '%Initial'
and @Database.hsi.itemlc.status = '0'
and DateDiff([Day], @Database.hsi.itemlc.transdate, getDate()) >=1
group by @Database.hsi.lifecycle.lifecyclename, @Database.hsi.lcstate.statename
END
您不能使用變量作爲對象名稱。你需要使用[動態sql](http://www.sommarskog.se/dynamic_sql.html)來解決這個問題。 –
取決於您可以使用多少個數據庫。如果只有2或3我會考慮使用一個案例。對於許多不同的數據庫,您必須使用動態SQL。 – Fred
具體而言,我猜你的語法錯誤發生在'count(@ Database.hsi.itemdata.itemnum)'作爲'Doc(s)Stuck''這一行的第一段時間,「你會得到相同的語法錯誤@Database ...在腳本的其餘部分之後的每個時段。 – 2012-09-27 15:30:54