Sql 递增nvarchar和数字的组合
以下场景: 我需要增加这样一个代码Sql 递增nvarchar和数字的组合,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,以下场景: 我需要增加这样一个代码DS0000001 因此,下一项将是DS0000002,接下来是DS0000003,依此类推 因此,为了在大型INSERT语句中生成此代码,我编写了以下函数: CREATE FUNCTION dbo.eufn_e5_importCRM_getNextClientCode( @partnerCode AS NVARCHAR(10), @number AS INT ) RETURNS NVARCHAR(20) AS BEGIN
DS0000001
因此,下一项将是DS0000002
,接下来是DS0000003
,依此类推
因此,为了在大型INSERT语句中生成此代码,我编写了以下函数:
CREATE FUNCTION dbo.eufn_e5_importCRM_getNextClientCode(
@partnerCode AS NVARCHAR(10),
@number AS INT
)
RETURNS NVARCHAR(20)
AS
BEGIN
DECLARE @next AS INT
DECLARE @zeroes AS NVARCHAR(10)
DECLARE @nextStr AS NVARCHAR(10)
DECLARE @return AS NVARCHAR(20)
DECLARE @partnerPrefix AS NVARCHAR(10)
SELECT @next = RIGHT(c.clientCode,7) FROM Clients c
SELECT @partnerPrefix = partners.partnerPrefix
FROM partners WHERE partnerCode = @partnerCode
SET @next = ISNULL(@next,0) + @number
SET @nextStr = CONVERT(NVARCHAR(10),@next)
SELECT @zeroes = CASE WHEN @next > 9 THEN '00000'
WHEN @next > 99 THEN '0000'
WHEN @next > 999 THEN '000'
WHEN @next > 9999 THEN '00'
WHEN @next > 99999 THEN '0'
WHEN @next > 999999 THEN ''
ELSE '000000'
END
IF ISNULL(@next,'') = ''
BEGIN
SET @return = @partnerPrefix + @zeroes + '1'
END
ELSE SET @return = @partnerPrefix + @zeroes + @nextStr
RETURN @return
END
@number
获取我使用row_number()
-函数手动添加到insert语句中的行号
这已经可以很好地工作了——它将正确的代码插入到表中
我不喜欢代码的这一部分:
SELECT @zeroes = CASE WHEN @next > 9 THEN '00000'
WHEN @next > 99 THEN '0000'
WHEN @next > 999 THEN '000'
WHEN @next > 9999 THEN '00'
WHEN @next > 99999 THEN '0'
WHEN @next > 999999 THEN ''
ELSE '000000'
END
我已经在stackoverflow上搜索了一段时间,也在Google上搜索了一下,但是我找不到像convert这样的函数,它将“0”保留在原来的位置
有没有办法让这个功能更灵活,如果可能的话:可重用
提前感谢您的帮助 这里有一个方法,你可以这样做
Declare @a int
Set @a =8756
Select 'DS' + REPLACE(STR(@a, 7), SPACE(1), '0')
演示:你的SQLFIDLE链接似乎坏了。@AndréLaszlo,是的,正在处理它,即使我不熟悉SQLFIDLE。这正是我想要的!谢谢也许你是对的。但情况略有不同。看到这个解决方案,听起来很相似,但在你的链接中,答案(和大多数答案)确实使用了其他功能。