假设我有一个变量:
declare @x int = /* smth here */
我有一个列(例如ColX)的表,它not null有一个default约束.现在我想以这样的方式更新表中的一些行:
update MyTable
set ColX = isnull(@x, default)
where blah-blah-blah
显然它无法执行,因为sql-server会显示错误,但我认为这个例子清楚地反映了我想要做的事情.那么问题是如何做到这一点?
谢谢!
更新 我现在有这些方法:
在单独的子查询中执行这两种情况:
if @x is null then update /* use default */ else update /* use @x */
这种方式简单明了.也许对于那个会进一步阅读它的人来说,这是最透明的.另外请记住,还需要为两者分别插入
@x is null /* use default */ 
和
@x is not null /* use @x */
例
创建用户定义的函数:
create function GetValueForColX(@value int) returns int
as begin
    return isnull(@value, /* default value */)
end
然后在默认情况下使用它 - (GetValueForColX(null))以及插入/更新查询GetValueForColX(@x)
系统表中显示的默认值仅适用于 CLR 过程。
如果您不想进行 2 次单独的更新,请在 DEFAULT 和更新中使用标量 UDF。因此,不要使用 GETDATE(),而是将其包装在 CREATE FUNCTION 中,更改默认值并更新以使用它。
但两次更新更简单......
| 归档时间: | 
 | 
| 查看次数: | 822 次 | 
| 最近记录: |