如何在SQL Server中的现有列上添加默认约束

时间:2015-05-16 07:59:30

标签: sql-server

我正在创建一个表,该表具有默认值为其他列值

的列的默认约束

这是我的表脚本:

CREATE TABLE [ADMIN].[TblUserType]
(
    [FunctionId] [tinyint] NOT NULL,
    [UserTpyeId] [int] IDENTITY(1,1) NOT NULL,
    [Description] [nvarchar](50) NOT NULL,
    [ParentId] [int] NOT NULL,
    [CreatedBy] [int] NOT NULL,
    [UpdatedBy] [int] NOT NULL,
    [CreatedOn] [datetime] NOT NULL,
    [UpdatedOn] [datetime] NOT NULL,
    [Status] [char](1) NOT NULL
)

现在我正在使用这个脚本改变表格

ALTER TABLE ADMIN.TblUserType
ADD CONSTRAINT De_Value DEFAULT UserTpyeId FOR (ParentId)

我收到这样的错误

  

有效表达式是常量,常量表达式和(在某些上下文中)变量。不允许使用列名。

但我需要添加该列(UserTpyeId)值具有此列的默认值(ParentId

怎么做?

谢谢

1 个答案:

答案 0 :(得分:2)

您不能在表的默认约束中使用其他列 - 您需要使用AFTER INSERT触发器来实现此目的:

CREATE TRIGGER trg_tblUserType_Insert
ON ADMIN.TblUserType
AFTER INSERT 
AS 
BEGIN
    UPDATE ut
    SET ut.ParentId = ut.UserTpyeId
    FROM ADMIN.TblUserType ut
    INNER JOIN Inserted i ON ut.UserTpyeId = i.UserTpyeId
END

另外:你在UserTpyeId中输错了 - 如果可能的话,在上线前解决这个问题!