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 等行。但我需要不同的风格。

我使用脚本时的数据库输出:

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

0

此行无效:

ORDER BY cislo_subjektu ASC

Order by 不是 UPDATE 语句中的有效子句。

此行也无效:

LPAD(@reference:=@reference+1, 8, '0')

你不能以这种方式增加@reference。

这是这样做的正确方法:

WITH UpdateData  As
(
SELECT reference_subjektu ,
ROW_NUMBER() OVER (ORDER BY cislo_subjektu ASC) AS RN
FROM dbo.expozitura
)

UPDATE dbo.expozitura
SET reference_subjektu = replicate('0', 8-len(RN) )
FROM dbo.expozitura 
INNER JOIN UpdateData ON expozitura.reference_subjektu = UpdateData.reference_subjektu
于 2013-10-19T16:27:42.917 回答
-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 回答