我有这段代码:
BEGIN
;THROW 50003,'UserTestStatusAction - Did not find a row matching Role, Current and New status',1
END
这是我到目前为止所尝试的内容:
BEGIN
;THROW 50003,'UserTestStatusAction - Did not find a row matching Role' + @Role + ', Current' + @CurrentTestStatusId + 'and New status ' + @NewTestStatusId,1
END
我也试过这个:
BEGIN
;THROW 50003,CONCAT('UserTestStatusAction - Did not find a row matching Role',@Role,', Current',@CurrentTestStatusId,'and New status ',@NewTestStatusId),1
END
如何将@ Role,@ CurrentTestStatusId和@NewTestStatusId的值插入此字符串?我尝试了+运算符,但这给了我一个语法错误。
答案 0 :(得分:2)
在调用THROW或其他类似函数时,我认为你不能将表达式作为参数(所有参数都必须是常量或变量)。
无论如何,我建议事先计算你的字符串,因为这也允许相应地处理NULL值:
DECLARE @error VARCHAR(MAX) =
'UserTestStatusAction - Did not find a row matching Role ' + ISNULL(CAST(@Role AS VARCHAR(100)), '') +
', Current ' + ISNULL(CAST(@CurrentTestStatusId AS VARCHAR(50)), '') +
'and New status ' + ISNULL(CAST(@NewTestStatusId AS VARCHAR(50)), '');
THROW 51000, @error, 1;
如果你的任何标记为NULL,这可以防止所有字符串无效。
答案 1 :(得分:1)
declare @Role varchar(20) = 'admin';
DECLARE @msg NVARCHAR(2048) = 'UserTestStatusAction - Did not find a row matching Role ' + @Role
;THROW 51000, @msg, 1;