我有一個需求,我需要爲超過200個表創建一個外鍵。例如,有ID爲主鍵的emp表,現在200個表具有emp_id,我需要引用emp.id。SQL Server - 創建多個表的外鍵
我知道我可以寫200個alter語句來創建外鍵。有一個簡單的方法來創建一個簡單的腳本?
請指教。謝謝你的幫助。
我有一個需求,我需要爲超過200個表創建一個外鍵。例如,有ID爲主鍵的emp表,現在200個表具有emp_id,我需要引用emp.id。SQL Server - 創建多個表的外鍵
我知道我可以寫200個alter語句來創建外鍵。有一個簡單的方法來創建一個簡單的腳本?
請指教。謝謝你的幫助。
這裏有一個竅門做
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'
列有壞的數據他可能會失敗(IE)一'emp_id'
這是不存在的EMP
表你很可能產生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'
在'emp'表中,列名是'ID'而不是'emp_id',所以我不認爲我們需要'table_name'條件 –
@ VR46感謝您的收穫! –
爲什麼你需要200張桌子?聽起來像你的數據庫可能從審查正常化中受益? – hamish