3 回答
TA贡献1803条经验 获得超6个赞
您需要使用一个中间变量。尽管SQL Server已经出现在TODO列表中有几年了,但它本身在参数列表中不支持这种操作!(请参阅“ 连接项目:使用标量函数作为存储过程参数”)
的语法EXEC是
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH <execute_option> [ ,...n ] ]
}
[;]
该文档目前尚不清楚可接受格式,value但似乎仅仅是“简单”表达式,例如文字值或带@@前缀的系统函数(例如@@IDENTITY)。SCOPE_IDENTITY()不允许使用其他系统功能(甚至不允许使用不需要括号的功能CURRENT_TIMESTAMP)。
所以暂时您需要使用如下语法
DECLARE @pID INT;
SET @pID = 1;
/*If 2008+ for previous versions this needs to be two separate statements*/
DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11))
EXEC WriteLog
'Component',
'Source',
@string
TA贡献1779条经验 获得超6个赞
您不能对存储过程的参数进行操作。您应该在另一个变量上分配该值,然后将其传递给SP。
DECLARE @pID int, @nameId VARCHAR(100);
SET @pID = 1;
SET @nameId = 'Could not find given id: ' + CAST(@pID AS varchar);
EXEC WriteLog 'Component', 'Source', @nameId
- 3 回答
- 0 关注
- 684 浏览
添加回答
举报