Sql server 使用SQL Server 2016向嵌套的SELECT值添加前导零时出现问题

Sql server 使用SQL Server 2016向嵌套的SELECT值添加前导零时出现问题,sql-server,tsql,Sql Server,Tsql,我试图将前导零添加到nvarchar数据类型值,该值的长度必须为9,但我的尝试没有任何运气。我正在构建一个平面文件,每个字段都是nvarchar数据类型 以下是我的原始SQL代码: SELECT (SELECT MAX([Record Number])+1 FROM #tempFINAL) as [Record Number] 在谷歌搜索之后,这里是尝试#1: 这是第二次尝试: 两次尝试都没有成功。任何帮助/指导都将不胜感激。我一定错过了一些相当简单的东西。谢谢。肖恩是正确的,您将字符串与in

我试图将前导零添加到nvarchar数据类型值,该值的长度必须为9,但我的尝试没有任何运气。我正在构建一个平面文件,每个字段都是nvarchar数据类型

以下是我的原始SQL代码:

SELECT (SELECT MAX([Record Number])+1 FROM #tempFINAL) as [Record Number]
在谷歌搜索之后,这里是尝试#1:

这是第二次尝试:


两次尝试都没有成功。任何帮助/指导都将不胜感激。我一定错过了一些相当简单的东西。谢谢。

肖恩是正确的,您将字符串与int混合。以下是4个快速选项:

Select [Record Number] = Format(max([Record Number])+1,'000000000') from #tempFINAL

Select [Record Number] = right(concat('000000000',max([Record Number])+1),9) from #tempFINAL

Select [Record Number] = right('000000000'+convert(varchar(10),max([Record Number])+1),9) from #tempFINAL

Select [Record Number] = right('000000000'+left(max([Record Number])+1,10),9) from #tempFINAL

问题是
+1
隐式地将
varchar
转换为
int
,因此失去了前导零

试试这个:

SELECT RIGHT('000000'+CAST((max('28') + 1) AS VARCHAR(6)),6)

SELECT RIGHT('000000'+CAST((MAX([Record Number] + 1) AS VARCHAR(6)),6) from #tempFinal

|(没有列名称)| | :--------------- | | 001946 |
dbfiddle

这是因为MAX(RecordNumber)返回一个int。您需要将其转换为nvarchar。但是要小心,MAX()+1很少是一个好方法。这在你们的情况下可能没问题,因为你们似乎在使用临时表。参考请参阅。谢谢你们。我感谢各位的答复。
Select [Record Number] = Format(max([Record Number])+1,'000000000') from #tempFINAL

Select [Record Number] = right(concat('000000000',max([Record Number])+1),9) from #tempFINAL

Select [Record Number] = right('000000000'+convert(varchar(10),max([Record Number])+1),9) from #tempFINAL

Select [Record Number] = right('000000000'+left(max([Record Number])+1,10),9) from #tempFINAL
SELECT RIGHT('000000'+CAST((max('28') + 1) AS VARCHAR(6)),6)

SELECT RIGHT('000000'+CAST((MAX([Record Number] + 1) AS VARCHAR(6)),6) from #tempFinal
SELECT RIGHT('000000'+CAST((max('28') + 1) AS VARCHAR(6)),6)
GO
| (No column name) | | :--------------- | | 000029 |
SELECT RIGHT('000000'+CAST((max('852') + 1) AS VARCHAR(6)),6)
GO
| (No column name) | | :--------------- | | 000853 |
SELECT RIGHT('000000'+CAST((max('1945') + 1) AS VARCHAR(6)),6)
GO
| (No column name) | | :--------------- | | 001946 |