我有一个要求,我需要为超过200个表创建一个外键。例如,有一个ID表有ID主键,现在200个表有emp_id,我需要引用emp.id.
我知道我可以编写200个alter语句来创建外键。是否有更简单的方法来创建一个简单的脚本?
请指教。谢谢你的帮助。
答案 0 :(得分:0)
这是一个诀窍
DECLARE @sql NVARCHAR(max)=''
SELECT @sql += '
ALTER TABLE ' + Object_name(object_id)
+ '
ADD CONSTRAINT FK_'
+ Object_name(object_id)
+ '_EMP_emp_id FOREIGN KEY (emp_id) REFERENCES EMP(id);'
FROM sys.COLUMNS
WHERE NAME = 'emp_id'
--Print @sql
EXEC Sp_executesql
@sql
注意:
@SQL
变量并检查生成的SQL
是否正常'emp_id'
都创建了外键'emp_id'
列包含错误数据(即)'emp_id'
EMP
表中不存在1>时,这可能会失败
醇>
答案 1 :(得分:0)
您可以使用alter table
动态生成information_schema.columns
语句。这样的事情应该让你开始:
SELECT 'ALTER TABLE '+ TABLE_NAME +
' ADD CONSTRAINT FK_'+ TABLE_NAME +'_Emp FOREIGN KEY ('+ COLUMN_NAME +')'+
' REFERENCES emp (Id)'+
' ON DELETE CASCADE'+
' ON UPDATE CASCADE;'+
' GO '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'emp_id'