2013-05-10 145 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'