Sql server 在SQL Server的表列中使用UDF作为默认值

Sql server 在SQL Server的表列中使用UDF作为默认值,sql-server,user-defined-functions,default-value,dml,udf,Sql Server,User Defined Functions,Default Value,Dml,Udf,我在SQL Server 2012 Express中创建了一个定标器UDF(称为sCurrentAppUser()),我希望在定义表时将此UDF用作默认值。但每次尝试时,都会出现一个错误“'sCurrentAppUser'不是可识别的内置函数名。” 由于我不能发布超过两个链接(声誉),我将在评论中链接到我的研究和参考资料 以下是我的UDF: ALTER FUNCTION [dbo].[sCurrentAppUser] () RETURNS nVarChar(128) AS BEGIN DE

我在SQL Server 2012 Express中创建了一个定标器UDF(称为sCurrentAppUser()),我希望在定义表时将此UDF用作默认值。但每次尝试时,都会出现一个错误“'sCurrentAppUser'不是可识别的内置函数名。”

由于我不能发布超过两个链接(声誉),我将在评论中链接到我的研究和参考资料

以下是我的UDF:

ALTER FUNCTION [dbo].[sCurrentAppUser] ()
RETURNS nVarChar(128)
AS BEGIN
   DECLARE @CurrentAppUser nVarChar(128)

   IF EXISTS (SELECT 1 FROM ActiveConnections WHERE ComputerName = host_name ()) BEGIN
      SELECT   @CurrentAppUser = CONVERT (nVarChar(128), LoginUser)
      FROM     ActiveConnections
      WHERE    ComputerName = host_name ()

   END ELSE BEGIN
      SELECT   @CurrentAppUser = Convert (nVarChar(128), suser_sname ())
      WHERE    NOT EXISTS (
                  SELECT   1
                  FROM     ActiveConnections
                  WHERE    ComputerName = host_name ()
               )

   END

   RETURN @CurrentAppUser

END
以及我尝试在第一列上创建具有默认约束的表:

CREATE TABLE [dbo].[Clients](
   [ModifyingUser] [nvarchar](128) NOT NULL DEFAULT sCurrentAppUser (),
   [Modification] [char](1) NULL DEFAULT 'A',
   [ModifyingHost] [nvarchar](128) NOT NULL DEFAULT host_name (),
   [ClientID] [uniqueidentifier] NOT NULL,
   [Label] [nvarchar](1024) NULL,
   CONSTRAINT [PK_Clients] PRIMARY KEY (
      [ClientID] ASC
   )
)

您应该为该函数添加架构名称:

CREATE TABLE [dbo].[Clients](
   [ModifyingUser] [nvarchar](128) NOT NULL DEFAULT dbo.sCurrentAppUser (),
   [Modification] [char](1) NULL DEFAULT 'A',
   [ModifyingHost] [nvarchar](128) NOT NULL DEFAULT host_name (),
   [ClientID] [uniqueidentifier] NOT NULL,
   [Label] [nvarchar](1024) NULL,
   CONSTRAINT [PK_Clients] PRIMARY KEY (
      [ClientID] ASC
   )
)

特别是说“您可以使用标量值UDF作为表中列的默认值。”并没有说不能这样做。给出了示例语法,将其视为计算列而不是默认约束,但这对我也不起作用。并谈到使用参数化的UDF作为默认约束,但“答案”谈到根本不使用UDF。标记为已解决。我只希望我能给你一个快速而正确的答案而不是那样的荣誉。谢谢您的意思是使用dbo.sCurrentAppUser()而不是sCurrentAppUser(),很好。。