Jak*_*ake 22 sql t-sql stored-procedures sql-update
我在存储过程中有一个更新语句,看起来像这样:
Update [TABLE_NAME]
Set XYZ=@ABC
Run Code Online (Sandbox Code Playgroud)
如果变量不为null或值为-1,是否有一种只触发update语句的好方法?
类似于一个IF NOT EXISTS...INSERT问题.
非常感谢.
Jam*_*ill 43
使用T-SQL IF:
IF @ABC IS NOT NULL AND @ABC != -1
UPDATE [TABLE_NAME] SET XYZ=@ABC
Run Code Online (Sandbox Code Playgroud)
看看MSDN文档.
Ada*_*ess 25
当您有许多更新时,另一种方法是使用COALESCE:
UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET
[ABC] = COALESCE(@ABC, [ABC]),
[ABCD] = COALESCE(@ABCD, [ABCD])
Run Code Online (Sandbox Code Playgroud)
小智 5
另一种方法是 ISNULL()。
UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET
[ABC] = ISNULL(@ABC, [ABC]),
[ABCD] = ISNULL(@ABCD, [ABCD])
Run Code Online (Sandbox Code Playgroud)
ISNULL 和 COALESCE 之间的区别在于返回类型。COALESCE 还可以采用两个以上的参数,并使用第一个不为空的参数。IE
select COALESCE(null, null, 1, 'two') --returns 1
select COALESCE(null, null, null, 'two') --returns 'two'
Run Code Online (Sandbox Code Playgroud)
需要注意的是,如果 COALESCE 没有非 NULL 的参数,它将抛出异常,因此如果只有两个参数并且两者都可以为 null - 请使用 ISNULL。
| 归档时间: |
|
| 查看次数: |
100789 次 |
| 最近记录: |