1

数値として生成するために必要なスクリプトを作成しましたvarcharが、MySQL でのみ機能しますが、機能しない SQL Server があります。

スクリプトはここにあります:

SET @reference = 0;

UPDATE dbo.expozitura 
SET reference_subjektu = LPAD(@reference := @reference + 1, 8, '0') 
ORDER BY cislo_subjektu ASC;

SQL Server のこのスクリプトには、まだ構文の問題があります。「:」が好きではありません。

私は自分の問題を説明するので、 にいくつかのvarcharデータがありreference_subjektます。このデータは私にとって重要ではないので、この列に新しいデータを数値として生成する必要がありますが、それはまだvarchar型です。

例えば

私の実際のデータは次のとおりです。

reference_subjektu
TR.Mac
Orgins
Kernel
Tybru
Serenity

ただし、このデータの前のデータを置き換える必要があります。

reference_subjektu
"00000001"
"00000002"
"00000003"
"00000004"
"00000005" and etc.....

アイデアはありますか?

私の SQL Server 情報:

  • バージョン: 11.0.2218

私はあなたのスクリプトを使用してみます: (a1ex07)

私はあなたのコードからこれを使用しています:

UPDATE dbo.expozitura 
SET reference_subjektu = replicate('0', 8 - len(rn) ) + b.rn
FROM dbo.expozitura  a 
INNER JOIN 
(
   SELECT dbo.expozitura.cislo_subjektu, ROW_NUMBER() OVER (ORDER BY cislo_subjektu) rn
   FROM dbo.expozitura
) b ON (b.cislo_subjektu = a.cislo_subjektu)

私の主キーはcislo_subjektu

そして、実際には123456などだけが行に返されます。しかし、私は別のスタイルが必要です。

スクリプトを使用したときの MY DB 出力:

cislo_subjektu  reference_subjektu  organizace  adresa_ulice    psc ico
1                       1                2                          729544866
2                       2                0        Linkoln 507       729544866
3                       3                0                     403 31   729544866
4                       4                0                          729544866
5                       5                0        Linkoln 66   578 99   729544866
6                       6                0                     558 41   729544866

私がどこに問題があるか知っていますか?

4

2 に答える 2

-1

dbo.expozitura.expozitura_id主キー列があると仮定すると、次のようにする必要があります。

UPDATE dbo.expozitura 
SET reference_subjektu = replicate('0', 8-len(rn) )+b.rn
FROM dbo.expozitura  a 
INNER JOIN 
(
   SELECT expozitura_id, 
   CAST(ROW_NUMBER() OVER (ORDER BY cislo_subjektu) AS varchar) AS rn
   FROM dbo.expozitura
) b ON (b.expozitura_id = a.expozitura_id)
于 2013-10-19T16:49:01.107 に答える