是否可以向多个表添加相同的约束?
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)
我已经生成了一些代码来在多个表中执行此操作。我这样做的错误是:
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)