Sql 是否可以向多个表添加相同的约束?
我已经在多个表中生成了一些代码来实现这一点。我执行此操作时遇到的错误是: ALTER TABLE语句中不允许使用变量 我明白。我生成的代码:Sql 是否可以向多个表添加相同的约束?,sql,sql-server,database,constraints,sp-executesql,Sql,Sql Server,Database,Constraints,Sp Executesql,我已经在多个表中生成了一些代码来实现这一点。我执行此操作时遇到的错误是: ALTER TABLE语句中不允许使用变量 我明白。我生成的代码: DECLARE @tableName VARCHAR(50) = 'myTable', @sql NVARCHAR(100), @parameter1 CHAR(1) = 'A', @parameter2 CHAR(2) = 'I' SELECT @sql = N'ALTER TABLE '+@tableName+' ADD
DECLARE
@tableName VARCHAR(50) = 'myTable',
@sql NVARCHAR(100),
@parameter1 CHAR(1) = 'A',
@parameter2 CHAR(2) = 'I'
SELECT @sql = N'ALTER TABLE '+@tableName+'
ADD CONSTRAINT CK_Status
CHECK (Status in (@parameter1, @parameter2))'
EXEC sp_executesql @sql,N'@parameter1CHAR(1), @parameter2 CHAR(1)',@parameter1,@parameter2
我知道这不管用。但是我想知道在某种程度上是否可能,因为我有很多表可以应用这个
注:
-我有一个代码来获取表、名称和所有内容,我只需要一些想法来添加字符串中的字符值。您可以添加相同的约束,但不能使用相同的名称。一个简单的方法就是省去名字。并且,将参数直接放入查询中:
DECLARE
@tableName VARCHAR(50) = 'myTable',
@sql NVARCHAR(100),
@parameter1 CHAR(1) = 'A',
@parameter2 CHAR(2) = 'I';
SELECT @sql = N'ALTER TABLE @tableName
ADD CONSTRAINT CHECK (Status in (''@parameter1'', ''@parameter2''))';
SET @sql = REPLACE(@sql, '@tableName', @tableName);
SET @sql = REPLACE(@sql, '@parameter1', @parameter1);
SET @sql = REPLACE(@sql, '@parameter2', @parameter2);
EXEC sp_executesql @sql;
如果您必须在许多表中处理此约束,您可能会考虑使用一个具有“代码>状态”/“代码>的有效值的表,并使用外键约束。”< /P> < P>是的,您可以从这个例子中做到这一点。我没有测试它,但它应该工作。
ALTER TABLE first_Table
Add Constraint first_Table_FK1 FOREIGN KEY (table1_id)
References second_Table (table2_id),
Add Constraint first_Table_UQ1 Unique (table1_id)
既然您正在将检查值硬编码到变量中,为什么不直接将它们放入exec调用中呢?如果值从未更改,则使用变量没有意义
exec sp_executesql@sql,N'A'字符1(1),'I'字符1(1)等等。
我已经考虑过了。但那不是我的问题。@sqlu的结果是:altertablemytable添加约束检查(statusin(A,I))注意CHAR值的状态。正确的方法是:altertablemytable添加约束检查(状态为('A','I'))@CarlosAndres。此查询在参数周围加上单引号。