在 SQL 服务器的 table 列中使用 UDF 作为默认值
Use a UDF as the default value in a table column in SQL Server
我在 SQL Server 2012 Express 中创建了一个缩放器 UDF(称为 sCurrentAppUser()),我想在定义 table 时使用此 UDF 作为默认值。但是每次尝试时,我都会收到错误消息“'sCurrentAppUser' 不是可识别的内置函数名称。”
由于我还不能 post 超过两个 link(声望),我将 link 在评论中对我的研究和参考文献进行评论。
这是我的 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
我尝试在第一列上使用默认约束创建 table:
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
)
)
我在 SQL Server 2012 Express 中创建了一个缩放器 UDF(称为 sCurrentAppUser()),我想在定义 table 时使用此 UDF 作为默认值。但是每次尝试时,我都会收到错误消息“'sCurrentAppUser' 不是可识别的内置函数名称。”
由于我还不能 post 超过两个 link(声望),我将 link 在评论中对我的研究和参考文献进行评论。
这是我的 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
我尝试在第一列上使用默认约束创建 table:
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
)
)