9

別のフィールドに基づいて、いくつかのレコードに注文列を挿入しようとしています。通常、MySQL では問題ありませんが、SQL Server ではここの構文がよくわかりません。

これは私が持っているものです:

DECLARE @a int
SET @a = 1

UPDATE tablename 
SET order_position = @a:=@a+1  
WHERE table_id = xxx

UPDATEしかし、私の一部は、これはワンヒットクエリではなく、関数/手順のルートをたどっていると考えています。

申し訳ありませんが、SQL Server の変数に慣れていない MySQL データベース担当者としてこれを書いたので、少し間違っている可能性があります。

レコードを 1 つずつロードしてこれを実行する必要があり、order_position 列を 1 ~ 7 (レコードが 7 つある場合) にする必要があります。

ありがとう、クリス

4

2 に答える 2

20

このコードを試してください:

DECLARE @a int
SET @a = 1
UPDATE tablename SET order_position = @a, @a=@a+1  WHERE table_id = xxx

問題である二重割り当てを実行しようとしています。 "order_position = @a:=@a+1"1 つはご存知のとおりで、もう 1 つは、a をインクリメントした結果が成功したということです。

于 2013-08-01T16:21:13.513 に答える
6

フィールドの更新から変数の増分を分離します。

DECLARE @a int
SET @a = 1
UPDATE tablename 
SET order_position = @a
   ,@a = @a + 1  
WHERE table_id = xxx

MySQL から来ているので、このタスクのための優れたツールを見落としているかもしれませんROW_NUMBER()

ROW_NUMBER()テーブルの各行に番号を割り当てるために使用できます。

SELECT *,ROW_NUMBER() OVER (PARTITION BY ....  ORDER BY .... )
FROM Table

PARTITION BY番号付けのためのグループ化を示します。つまり、 で使用されるフィールドの組み合わせごとに '1' があり、それらはもちろん句PARTITION BYに基づいて 1-n から順序付けられます。ORDER BY

于 2013-08-01T16:21:34.667 に答える