我想使用Scalar-valued function
这是一个例子:
CREATE TABLE [MyTable]
(
[Id] [int] NOT NULL
[ScrambledId] [int] NOT NULL
)
ALTER TABLE [MyTable] ADD DEFAULT (dbo.MakeItScrambled([Id])) FOR [ScrambledId]
CREATE function [dbo].MakeItScrambled(@Value int)
BEGIN
--Some logic
retrun @ScrambledValue
END
我需要根据列[ScrambledId]
[Id]
进行加扰
似乎不允许使用列名:
名称" Id"在这种情况下是不允许的。有效的表达式是 常量,常量表达式和(在某些上下文中)变量。 不允许使用列名。
有什么建议吗?
答案 0 :(得分:1)
您尚未添加已创建普通列的计算列,并尝试向其添加默认值。您无法在默认约束中引用其他列。
修改:这会引发错误:
Computed column' ScrambledId'因为列不能持久化 是非确定性的
如果你想要一个计算列,那么在表定义中使用......
[ScrambledId] AS dbo.MakeItScrambled([Id]) PERSISTED
- 我建议在基于标量函数进行计算时使用持久化。
或者,您可以在插入或更新[Id]时添加更新/插入触发器以设置[ScrambledId]的值。