【问题标题】:How to create default constraint dependent other column in sql server如何在sql server中创建依赖于其他列的默认约束
【发布时间】:2013-03-20 10:55:44
【问题描述】:

我有一张这样的桌子

标签1

create table tab1(ID int identity(1,1), Type varchar(10),IsValued bit)

tab1:

ID Type IsValued
----------------
1   S   1
2   R   0
3   R   0
4   S   1
5   S   1
6   R   0
7   S   1

而不是将值插入 IsValued 列 我想在 Type ='S' 时创建一个约束(NOT TRIGGER),IsValued 应该插入为 1 当 Type ='R' 时,IsValued 应插入为 0

点赞:IsValued = case when Type ='S' then 1 when Type ='R' then 0 end

我怎样才能做到这一点..

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql tsqlt


    【解决方案1】:

    您需要一个计算列。例如:

    CREATE TABLE tab1
    (
     ID INT IDENTITY(1,1)
    ,[Type] VARCHAR(10)
    ,IsValued AS CASE [Type] WHEN 'S' THEN 1
                             WHEN 'R' THEN 0
                 END
    )
    

    您可以使用以下语法添加到现有表:

    ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
                                                     WHEN 'R' THEN 0
                                         END
    

    您可以通过在列创建后添加关键字PERSISTED 使列持久化。持久化该列意味着该字段存储在磁盘上。当您插入或更新记录时,SQL Server 将计算出该点的值。如果您不这样做,SQL Server 将不得不在您每次访问该行时解决它。可以在SQL Server 2005 Computed Column Is Persisted找到一个很好的解释

    ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
                                                     WHEN 'R' THEN 0
                                         END PERSISTED
    

    【讨论】:

    • IsValued 列使用如下方式新添加到该表中:alter table tab1 add IsValued bit
    • @sharath 我已经专门针对您的问题更新了我的示例
    • @sharath 只是一个小提示,您可能希望在 END 之后添加单词 PERSISTED。这里解释stackoverflow.com/questions/916068/…
    • 好的.. 但是如果该列已经存在于该表中怎么办。 @twoleggedhorse 对此出错。 ALTER TABLE dbo.tab1 ALTER COLUMN IsValued AS CASE [Type] WHEN 'S' THEN 1 WHEN 'R' THEN 0 END PERSISTED
    • @RamDas 您只能在特定条件下更改列:sqlserverplanet.com/ddl/alter-table-alter-column 您可能必须删除该列,然后使用关键字添加它。 ALTER TABLE dbo.tab1 DROP COLUMN IsValued
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多