2013-05-10 241 views
3

(對不起問題的業餘性質)SQL服務器 - 通過服務器和數據庫存儲過程

我試圖將服務器名和數據庫名稱傳遞到存儲過程,做一些記錄如下

exec [dbo].[Logger] 
     @Server = @@servername, 
     @Database = db_name(db_id()), 
     @Task = 'Some task'; 

,但我不斷收到此錯誤 -

消息102,級別15,狀態1,行10
附近有語法錯誤DB_ID「。

我已經得到這個工作使用declare @dbname varchar(255) = db_name(db_id());在頂部,然後使用它。但它似乎是一個不必要的變量。

感謝

+0

DB_NAME返回NVARCHAR(128)不爲varchar(255) – 2013-05-10 16:54:18

+3

這額外的變量** **是確實是必要的,因爲你**不能**使用功能在存儲過程執行調用中 - 您需要具有變量和/或文字所需的所有值 – 2013-05-10 16:54:34

+2

重複的:http://stackoverflow.com/questions/5967035/using-function-as-a-parameter-when-executing- a-stored-procedure – 2013-05-10 16:55:48

回答

1

試試這個:

declare @servername varchar(100) = @@servername 
declare @dbname = db_name(db_id()) 

exec [dbo].[Logger] 
     @Server = @servername, 
     @Database = @dbname, 
     @Task = 'Some task'