私は一意のキーなしでテーブルに行を挿入する必要があるクエリを持っています。T-SQL、副問合せでMAX()+ 1を挿入すると、代替値が増えませんか?
--TableA
--PK int (Primary key, no-identity)
--CustNo int
INSERT INTO TableA (PK,CustNo)
SELECT (SELECT MAX(PK)+1 AS PK FROM TableA), CustNo
FROM Customers
(簡略化した例 - :-)可能な並行性の問題についてはコメントしないでください)
問題は、それが処理された行「ごとに、」PKをインクリメントしないということである、と私主キー違反を取得します。
私はカーソル/ whileループでそれを行う方法を知っていますが、それを避け、セットベースの方法で解決したいと考えています。
は(実行しているSQL Server 2008の標準)
なぜ列をID列にしないのですか? – Chandu
+1 @Cybernate - これはひどい考えです。だから、検索するのが面倒だった場合は、これに似た約20の質問があり、それぞれがなぜ悪い考えであるかを教えてくれます。 – JNK
短いストーリー:もし私ができるなら、私はアイデンティティを作るだろう:-)。 @JNK私は大丈夫でしたが、それは私の唯一の選択肢であり、可能な限り最良の方法で解決したいのです。また、私は単純化された例を提供したことに留意してください。 – KorsG