如何在SQL Server中创建确定的FullName标量值函数?

时间:2013-12-18 21:14:30

标签: sql sql-server user-defined-functions

我在SQL-Server 2008数据库中定义了以下标量值函数:

CREATE FUNCTION FullName 
(
    @title nvarchar(50),
    @firstName nvarchar(50),
    @middleName nvarchar(50),
    @lastName nvarchar(50),
    @suffix nvarchar(50)
)
RETURNS nvarchar(300)
AS
BEGIN
    DECLARE @result nvarchar(300) = @title

    IF LEN(@firstName) > 0
    BEGIN
        IF LEN(@result) > 0
        BEGIN
            SET @result += N' '
        END
        SET @result += @firstName
    END

    IF LEN(@middleName) > 0
    BEGIN
        IF LEN(@result) > 0
        BEGIN
            SET @result += N' '
        END
        SET @result += @middleName
    END

    IF LEN(@lastName) > 0
    BEGIN
        IF LEN(@result) > 0
        BEGIN
            SET @result += N' '
        END
        SET @result += @lastName
    END

    IF LEN(@suffix) > 0
    BEGIN
        IF LEN(@result) > 0
        BEGIN
            SET @result += N', '
        END
        SET @result += @suffix
    END

    RETURN @result

END

我想创建一个基于此函数的持久计算列,但是当我尝试保存计算列时,我收到此错误:

'Members' table
- Unable to modify table.  
Computed column 'FullName' in table 'Tmp_Members' cannot be persisted because the column is non-deterministic.

我可以创建一个非持久的计算列没问题。这是我桌子的简略架构:

CREATE TABLE [dbo].[Members](
    [Id] [int] NOT NULL,
    [Title] [nvarchar](50) NULL,
    [FirstName] [nvarchar](50) NULL,
    [MiddleName] [nvarchar](50) NULL,
    [LastName] [nvarchar](50) NULL,
    [Suffix] [nvarchar](50) NULL,
    [FullName]  AS ([dbo].[FullName]([Title],[FirstName],[MiddleName],[LastName],[Suffix])),
 CONSTRAINT [PK_Members] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

0 个答案:

没有答案