一尘不染

无法保留计算列

sql

我有一个自定义函数,我正在尝试使用此函数创建一个持久化的列。

它给了我以下错误。

表’SomeTable’中的计算列’FormattedSSN’无法保留,因为该列是不确定的。

这是函数:

ALTER FUNCTION [dbo].[FormatSSN]()
RETURNS VARCHAR(11)
AS
BEGIN
    return '';
END

这是使用函数添加列的查询:

ALTER TABLE SomeTable
ADD FormattedSSN as dbo.FormatSSN() PERSISTED

请建议是否有任何出路。谢谢。


阅读 127

收藏
2021-03-17

共1个答案

一尘不染

WITH SCHEMABINDING 添加到这样的函数中:

ALTER FUNCTION [dbo].[FormatSSN]
(
@SSN    VARCHAR(9)
)
RETURNS CHAR(11)
WITH SCHEMABINDING
AS
BEGIN
  your stuff here
END

然后运行以验证:

IF OBJECTPROPERTY (OBJECT_ID(N'[dbo].[FormatSSN]'),'IsDeterministic') = 1
   PRINT 'Function is detrministic.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'[dbo].[FormatSSN]'),'IsDeterministic') = 0
   PRINT 'Function is NOT detrministic'
GO

在这里工作。

2021-03-17