2016-02-21 133 views
-1

我有一個需求,我需要爲超過200個表創建一個外鍵。例如,有ID爲主鍵的emp表,現在200個表具有emp_id,我需要引用emp.id。SQL Server - 創建多個表的外鍵

我知道我可以寫200個alter語句來創建外鍵。有一個簡單的方法來創建一個簡單的腳本?

請指教。謝謝你的幫助。

+0

爲什麼你需要200張桌子?聽起來像你的數據庫可能從審查正常化中受益? – hamish

回答

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. T當'emp_id'列有壞的數據他可能會失敗(IE)一'emp_id'這是不存在的EMP
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' 
+0

在'emp'表中,列名是'ID'而不是'emp_id',所以我不認爲我們需要'table_name'條件 –

+0

@ VR46感謝您的收穫! –