2016-12-19 16 views
-1

SQL Server 2008で作業中で、テーブルを更新しようとしています。私はちょうど15桁のシーケンスで更新される最初の100行が必要です。SQL:複数の行(トップ100)を順次データで更新する

Declare @id varchar 
Set @id = 2435435345962 

UPDATE TOP (100) Table1 
SET @id = Column_nm = @id + 1 
GO 

が、私は次のエラーメッセージ取得しています:受信変数の長さ1が小さい

メッセージ426、レベル16、状態1、行3
を私は、次の試してみましたカラム 'Column_nm'の長さ15よりも長くなります。

+1

なぜ変数を「VARCHAR」として宣言していますか? – Siyual

+1

また、クエリに 'ORDER BY'も指定していません。あなたが明示的に何を注文するかを言わない限り、 'TOP 100'は任意の行を返します。 – Siyual

答えて

1

いくつかのこと。あなたは00から99を追加することができるように0から開始します。

ので、エラーメッセージがあなたの変数の長さについてですベース

WITH cte as ( 
     SELECT TOP 100 *, 
       ROW_NUMBER() OVER (ORDER BY somefield) -1 as rn -- row_number start with 1. 
     FROM Table1 
     ORDER BY somefield 
) 
UPDATE cte 
SET anotherfield = '1234567890ABC' + REPLACE(STR(rn, 2, 0), ' ', '0') 
        ^^ 13 chars  ^^ two digits number 
1

で始めることができます。 SQL Serverでは、varcharのデフォルトの長さは1です(msdn.microsoft.comから私はフランス語のリンクのみです)。

Declare @id varchar(15) 
Set @id = 2435435345962 
UPDATE top (100) Table1 
SET @id = Column_nm = @id + 1 
GO 

文字列をこの変数に入れるには、長さ15のidを宣言する必要があります。

+0

idは13桁、OPは最後の数字として00-99を追加して15にする –

関連する問題