Sql server 如果其他位列为true,如何更改ms sql中的约束
我正在数据库中建立一个代码本。 我有三个专栏:Sql server 如果其他位列为true,如何更改ms sql中的约束,sql-server,Sql Server,我正在数据库中建立一个代码本。 我有三个专栏: [IDReal]int-identity(1,1),[IsReal]位不为null,[code]nvarchar(20)null 现在,当用户将[IsReal]更改为1时,我的列[Code]将更改为NOTNULL和unique,反之亦然 我在尝试类似的东西 CREATE TABLE [dbo].[sReal]( [IDReal] [int] IDENTITY(1,1) NOT NULL, [Code] [nvarchar](20) NULL, [I
[IDReal]int-identity(1,1),[IsReal]位不为null,[code]nvarchar(20)null
现在,当用户将[IsReal]更改为1时,我的列[Code]将更改为NOTNULL和unique,反之亦然
我在尝试类似的东西
CREATE TABLE [dbo].[sReal](
[IDReal] [int] IDENTITY(1,1) NOT NULL,
[Code] [nvarchar](20) NULL,
[IsReal] [bit] NOT NULL,
ALTER TABLE [dbo].[sReal] ADD CONSTRAINT [DEF_IsReal] DEFAULT ((0)) FOR [IsReal]
GO
ALTER TABLE [dbo].[sReal] ADD CONSTRAINT [CHNG_IsReal] IF [IsReal]=1 THEN (ALTER TABLE [dbo].[sReal] ALTER COLUMN [Code] [nvarchar](20) not null unique)
ELSE END IF
GO`
当然,这不起作用,我不能使用触发器、函数或过程来解决这个问题
有没有其他解决办法来完成我想做的事情。这可能会帮助你再试一次,或者用另一种方式再试一次
IF EXISTS(
SELECT 1 From INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='sReal'
AND COLUMN_NAME='IsReal' AND DATA_TYPE='bit'
)
Begin
DECLARE @Real BIT
SELECT TOP 1@Real=[IsReal] From [sReal] WHERE [IsReal]=1
IF (@Real=1 )
Begin
ALTER TABLE [dbo].[sReal] ALTER COLUMN [Code] [nvarchar](20) NOT NULL
ALTER TABLE [dbo].[sReal] ADD CONSTRAINT UC_Code UNIQUE ([Code]);
END
END
一个简单的方法可以是:
Declare @Variable1 int;
SELECT @Variable1 = [IsReal] From [sReal] WHERE [IsReal]=1 --your user specific condition
IF @Variable1 = 1
BEGIN
alter table [sReal] ALTER COLUMN [Code][nvarchar](20) NOT NULL
alter table [sReal] ADD CONSTRAINT [CHNG_IsReal] UNIQUE([Code])
END
ELSE
IF @Variable1 <> 1
BEGIN
alter table [sReal] DROP CONSTRAINT [CHNG_IsReal]
alter table [sReal] ALTER COLUMN [Code][nvarchar](20) NULL
END
Declare@variable1int;
从[sReal]中选择@Variable1=[IsReal],其中[IsReal]=1--您的用户特定条件
如果@Variable1=1
开始
alter table[sReal]alter COLUMN[Code][nvarchar](20)不为空
alter table[sReal]添加约束[CHNG_IsReal]唯一([Code])
结束
其他的
如果@Variable1
开始
alter table[sReal]DROP约束[CHNG_IsReal]
alter table[sReal]alter COLUMN[Code][nvarchar](20)NULL
结束
动态更改架构无法解决此问题。模式应用于整个表。相反,我认为您应该添加以下内容:
在dbo.sReal(code)上创建唯一索引ix_代码,其中IsReal=1
ALTER TABLE dbo.sReal ADD CONSTRAINT cc_code CHECK(IsReal=0或代码不为NULL)