我有一个像这样的sproc,如果它还不存在,它基本上会在字段中附加一个前缀:
ALTER PROCEDURE [dbo].[AgSp_UpdateAgTbl_Licensing ](@newPrefix nvarchar, @systemName nvarchar)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
update AgTbl_Licensing
set UrlPrefixes =
case
when UrlPrefixes is null or UrlPrefixes = ''
then @newPrefix
else convert ( nvarchar( max ), UrlPrefixes) + ', '+@newPrefix
end
where SystemName = @systemName and (UrlPrefixes not like ('%'+@newPrefix+'%') or UrlPrefixes is null)
END
我试着这样称呼它:
Execute AgSp_UpdateAgTbl_Licensing 'eb_', 'EB1';
但是没有对数据库进行更新 - 为什么会这样?我无法调试,因为我没有sysadmin
答案 0 :(得分:1)
我认为你应该声明过程参数的长度为;
@newPrefix nvarchar(50), @systemName nvarchar(50)
否则,只需要FIRST character
字符串,因此您的WHERE clause fails
就可以找到要更新的记录。而且你的参数也不是你所期望的那样。
答案 1 :(得分:1)
(忽略在单个列中存储多个值几乎总是比将它们正确存储在表中的行中更糟糕)
您已为程序声明了两个参数,长度均为1.尝试:
ALTER PROCEDURE [dbo].[AgTbl_Licensing](@newPrefix nvarchar(100), @systemName nvarchar(100))
如果未在数据定义或变量声明语句中指定n,则默认长度为1.如果未使用CAST函数指定n,则默认长度为30.