2011-04-05 73 views
1

我想在SQL Server 2000中創建一個表,其中有一個IGNORE_DUP_KEY設置爲ON的複合主鍵。在具有複合主鍵的Sql Server 2000中的IGNORE_DUP_KEY

我試過在SQL Server Management Studio Express中尋找這個選項,但是我找不到它,所以現在我只能以編程方式創建表。每一個SQL命令,我發現在谷歌或堆棧溢出給我一個錯誤:

Incorrect syntax near '('.

表應當有4列(A,B,C,d)所有十進制(18)和我需要一個主鍵,公元前。

如果有人可以發佈示例CREATE命令,我將不勝感激。

+0

什麼是IGNORE_DUP_KEY主鍵的含義?它看起來像一個設計缺陷! – jachguate 2011-04-05 01:11:37

+0

我期待這樣的評論:),但只要你考慮到所有方面(好與壞),我不認爲這是一個設計缺陷 - >這是現在對我的工作。我希望我的項目是唯一的,但我不想在插入過程中驗證它們的唯一性。我已經看到它可以使用連接手動完成,但我懷疑它和使用IGNORE_DUP_KEY一樣快。如果你願意,我可以更多地描述我將在哪裏使用它。 – 2011-04-05 01:18:47

回答

3
create table MyTable2 (
    [a] decimal(18,2) not null, 
    [b] decimal(18,2) not null, 
    [c] decimal(18,2) not null, 
    [d] decimal(18,2), 
    CONSTRAINT myPK PRIMARY KEY (a,b,c) 
) 

CREATE UNIQUE INDEX MyUniqueIgnoringDups 
ON MyTable2 (a,b,c) 
    WITH IGNORE_DUP_KEY  --SQL 2000 syntax 
    --WITH(IGNORE_DUP_KEY = On) --SQL 2005+ syntax 

--insert some data to test. 
insert into mytable2 (a,b,c,d) values (1,2,3,4);--succeeds; inserts properly 
insert into mytable2 (a,b,c,d) values (1,2,3,5);--insert fails, no err is raised. 
-- "Duplicate key was ignored. (0 row(s) affected)" 

任何有興趣,這裏是什麼從Erland Sommarskog on the MSDN forums發生的解釋:

When IGNORE_DUP_KEY is OFF, a duplicate key value causes an error and the entire statement is rolled back. That is, if the statement attempted to insert multiple rows, no rows are inserted.

When IGNORE_DUP_KEY is ON, a duplicate key value is simply ignored. The statement completes successfully and any other rows are inserted.

+0

感謝您的回答,但它說'IGNORE_DUP_KEY'不是一個確認的ALTER TABLE選項。有任何想法嗎? – 2011-04-05 01:26:36

+0

完美。它正在工作。謝謝!。但是,在您提供的鏈接中,我發現了一個與性能和兼容性問題相關的有趣鏈接。他們對我來說沒問題,但如果有人使用它,那麼你應該檢查出這個鏈接。 – 2011-04-05 01:32:14

+0

是的,我見過:)。實際上,有兩個單獨的命令,允許我在已經創建的表上運行CREATE INDEX。無論如何,我雖然接受解決方案就足夠了:) – 2011-04-05 01:38:53