提问人:Nandkumar Gaikwad 提问时间:1/16/2023 最后编辑:Nandkumar Gaikwad 更新时间:1/18/2023 访问量:183
SQL Server 存储过程传递旧值而不是新值
SQL Server stored procedure passing old values not new value
问:
这是我的表格:
search_id search_term clicked count
------------------------------
1 rabbit 0 5
2 airline 1 4
这是我的存储过程:
alter procedure update_item
(@search_id int,
@search_term varchar(50),
@clicked int)
as
begin
update search_events
set search_term= @search_term,
clicked = @clicked
where search_id = @search_id
end
--exec update_item @search_id=1,@search_term='rabbit',@clicked=0
我创建了一个存储过程,并传递了两个参数。
我只想传递一个参数来更新记录,第二个参数值将是旧值。
可以使用旧值传递参数。
例如:
exec update_item @search_id= 1, @search_term= 'pass here old value that it is rabbit', @clicked = 1
仅将单击的值更新为 0 的 1。
答:
0赞
Ortiga
1/18/2023
#1
如果只需要一个参数,则可以使用简单的 if 语句,如果值为 null,则省略 set 子句
CREATE PROCEDURE update_item (
@search_id INT
,@search_term VARCHAR(50)
,@clicked INT
)
AS
BEGIN
IF (@search_term IS NULL)
UPDATE search_events
SET clicked = @clicked
WHERE search_id = @search_id
ELSE
UPDATE search_events
SET search_term = @search_term
,clicked = @clicked
WHERE search_id = @search_id
END
如果需要检查更多参数,则需要动态生成 update 语句。基本示例如下:
ALTER PROCEDURE update_item (
@search_id INT
,@search_term VARCHAR(50)
,@clicked INT
)
AS
BEGIN
DECLARE @Sql NVARCHAR(4000) = N'UPDATE search_events SET ',
@Params NVARCHAR(300) = N'@search_id INT, @search_term VARCHAR(50), @clicked INT'
IF (@search_term IS NOT NULL)
SET @Sql = @Sql + ' search_term = @search_term,'
SET @Sql = @Sql + ' clicked = @clicked'
SET @Sql = @Sql + ' WHERE search_id = @search_id'
EXEC sp_executesql @Sql, @Params, @search_id=@search_id, @search_term=@search_term, @clicked=@clicked
END
评论
@serachid
searchid
update search_events set clicked=@clicked where search_id=@serachid
@searchitem
NULL
ISNULL
COALESCE
SET