我已经生成了一些代码来在多个表中执行此操作。我得到的错误是:
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)