0

これはおかしなことに聞こえるかもしれませんが (もし私がデータベースを設計していたら別の方法で作成していたでしょう)、実際には挿入時に重複キーを強制したいと考えています。私は、すべての行で同じ値を持つ「null ではない」pk として列を持つように設計されたデータベースを使用しています。私が使用しているレコード管理ソフトウェアは、どういうわけか、そのレコードごとにこれらの列に重複を挿入できます。別のテーブルの列からこのテーブルの 1 つの列にデータをコピーする必要があります。通常、私はその列にのみ挿入しようとしますが、pk は 'not null' に設定されているため、それらに何かを入れる必要があり、すべてのレコードで何かが同じでなければならないというテーブルの設定方法. これは不可能なはずですが、記録保持ソフトウェアを作成した会社は、何らかの方法でそれを機能させました。

PS私はこれが通常まったく良い考えではないことを知っています。したがって、それがどれほどクレイジーであるかに関係なく、これをどのように行うことができるかについての提案を含めてください. ありがとうございました。

4

1 に答える 1

0

SQL Server の主キーは一意で、NOT NULLである必要があります。したがって、重複データが表示されている列は、それ自体が主キーになることはできません。urlreader が示唆するように、これは 1 つ以上の他の列を持つ複合主キーの一部である必要があります。

テーブルの主キーを構成する列を確認する方法: Enterprise Manager でテーブルを展開し、[列] を展開します。主キー列の横には「キー」記号が表示されます。次のように、列の説明に「PK」も表示されます。

MyFirstIDColumn (PK, int, not null)
MySecondIDColumn (PK, int, not null)

主キーを構成する列がわかったら、一意のデータの組み合わせを列に挿入していることを確認してください。したがって、上記のサンプル テーブルでは、次のようになります。

INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,1) --SUCCEED
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,2) --SUCCEED
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,1) --FAIL because of duplicate (1,1)
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,3) --SUCCEED

主キーの詳細:

http://msdn.microsoft.com/en-us/library/ms191236%28v=sql.105%29.aspx

于 2013-04-25T23:05:21.250 に答える