我有一个自定义函数,我正在尝试使用此函数创建一个持久列.
它给了我以下错误.
表'SomeTable'中的计算列'FormattedSSN'无法保留,因为该列是非确定性的.
这是功能:
ALTER FUNCTION [dbo].[FormatSSN]()
RETURNS VARCHAR(11)
AS
BEGIN
return '';
END
Run Code Online (Sandbox Code Playgroud)
以下是使用函数添加列的查询:
ALTER TABLE SomeTable
ADD FormattedSSN as dbo.FormatSSN() PERSISTED
Run Code Online (Sandbox Code Playgroud)
如果有任何出路,请建议.谢谢.
Dam*_*vic 38
将WITH SCHEMABINDING添加到函数中,如下所示:
ALTER FUNCTION [dbo].[FormatSSN]
(
@SSN VARCHAR(9)
)
RETURNS CHAR(11)
WITH SCHEMABINDING
AS
BEGIN
your stuff here
END
Run Code Online (Sandbox Code Playgroud)
然后运行它来验证:
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
Run Code Online (Sandbox Code Playgroud)
在这里工作.
小智 5
如何直接指定定义:
ALTER TABLE SomeTable
ADD FormattedSSN as
case when len(EmployeeSSN) = 9 then
substring(EmployeeSSN, 1, 3) + '-' +
substring(EmployeeSSN, 4, 2) + '-' +
substring(EmployeeSSN, 6, 4)
else EmployeeSSN end
PERSISTED
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14714 次 |
| 最近记录: |