以下爲我工作(你必須的db_owner執行此操作)
--Declare一個變量獲得表上的約束上,並分配給一個變量
DECLARE @PK_CONST_NAME AS varchar(100)<br>
SET @PK_CONST_NAME = (SELECT NAME FROM SYS.KEY_CONSTRAINTS WHERE OBJECT_NAME(PARENT_OBJECT_ID) = '[TABLENAME]')
- 變量來存儲查詢
SET @DropAlterQuery = ''<br>
SET @RecreateAlterQuery = ''
- Contruct查詢
SET @DropAlterQuery = CONCAT('ALTER TABLE [TABLENAME] DROP CONSTRAINT ',@PK_CONST_NAME)
- 執行對滴速的約束上
EXEC(@DropAlterQuery)
構造查詢 - 改變柱尺寸(現在,這個說法可以作爲約束上被丟棄)
ALTER TABLE [TABLENAME]
ALTER COLUMN BATCH_ID VARCHAR(200) NOT NULL
- Contruct查詢
SET @RecreateAlterQuery = CONCAT(CONCAT('ALTER TABLE [TABLENAME] ADD CONSTRAINT ',@PK_CONST_NAME), ' PRIMARY KEY (<<PRIMARY KEY COLUMN1>>, <<PRIMARY KEY COLUMN2>>, <<PRIMARY KEY COLUMN2>>... So on)')
- 執行了重新創建構建的下降約束上
EXEC(@RecreateAlterQuery)
更改PK值查詢:這聽起來真的很奇怪!你如何改變應該用於實現表之間關係的值?你確定你正在試圖闡述的解決方案是解決你的問題嗎? – 2009-04-10 10:20:42
我對這個PK沒有任何關係。我知道這聽起來很奇怪,也許是這樣,但這是我需要在這個地方應用的解決方案。 – 2009-04-10 10:43:04
如果有重複,那麼它不再是一個主鍵,那麼爲什麼將它添加回來呢?你有沒有考慮一個連接的主鍵,可以讓你保持約束? – 2009-04-10 11:36:40