SQL Server - 创建多个表的外键

时间:2016-02-21 07:35:44

标签: sql-server foreign-keys

我有一个要求,我需要为超过200个表创建一个外键。例如,有一个ID表有ID主键,现在200个表有emp_id,我需要引用emp.id.

我知道我可以编写200个alter语句来创建外键。是否有更简单的方法来创建一个简单的脚本?

请指教。谢谢你的帮助。

2 个答案:

答案 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 

注意:

  1. 打印@SQL变量并检查生成的SQL是否正常
  2. 以上代码考虑所有200个表的名称'emp_id'都创建了外键
  3. 'emp_id'列包含错误数据(即)'emp_id' EMP表中不存在时,这可能会失败

答案 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'