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



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

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

我知道它不工作。但是我希望它在某种程度上是可能的,因为我有很多表可以应用它。

注意:-我有一个代码来获取表和名称和一切,我只需要一些想法来添加字符串中的字符值。

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

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;

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

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

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)

相关内容

  • 没有找到相关文章

最新更新