是否可以向多个表添加相同的约束?

Is It possible to add same constraint to multiple tables?

我已经生成了一些代码来在多个表中执行此操作。我这样做的错误是:

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 CONSTRAINT CK_Status
               CHECK (Status in (@parameter1, @parameter2))'
EXEC sp_executesql @sql,N'@parameter1CHAR(1), @parameter2 CHAR(1)',@parameter1,@parameter2

我知道这行不通。但我希望它是否可以某种方式实现,因为我有很多表可以应用它。

注意: - 我有一个代码来获取表和名称以及所有内容,我只需要一些想法来在字符串中添加 char 值。

您可以添加相同的约束,但不能使用相同的名称。一个简单的方法就是把名字去掉。并且,将参数直接放在查询中:

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;

如果您必须在许多 table 中处理此约束,您可以考虑使用有效值为 status 的 table 并改用外键约束。

是的,你可以从这个例子中做到这一点,我没有测试它,但它应该可以工作。

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)