需要在SQL Server 2012中自动增加字符串

时间:2015-11-28 07:53:10

标签: sql sql-server sql-server-2012

考虑SQL Server 2012中的表

789-0000000

上述数字将被视为SQL Server 2012中的字符串,但每当我更新记录时,我都需要增加到1。

例如:

  • 当我更新记录1时,它应增加到789-0000001
  • 当我更新记录2时,它应增加到789-0000002

最后增量应仅为789- 0000000

4 个答案:

答案 0 :(得分:4)

最佳解决方案是使用

  • CGAffineTransform列,以使SQL Server处理数值的自动增量
  • 计算的,持久的列,将该数值转换为您需要的值

所以试试这个:

ID INT IDENTITY(1,1)

现在,每次在CREATE TABLE dbo.YourTable (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, CompanyID AS '789-' + RIGHT('000000' + CAST(ID AS VARCHAR(7)), 7) PERSISTED, .... your other columns here.... ) 中插入一行而未指定dbo.YourTableID的值时:

CompanyID

然后SQL Server将自动且安全地增加INSERT INTO dbo.YourTable(Col1, Col2, ..., ColN) VALUES (Val1, Val2, ....., ValN) 值,而ID将包含CompanyID789-0000001等值。 ....等等 - 自动,安全,可靠,无重复。

答案 1 :(得分:0)

你可以split字符串 e.g:

SELECT Item
FROM dbo.SplitString('Apple,Mango,Banana,Guava', ',')

然后cast它 e.g:

SELECT CAST(YourVarcharCol AS INT) FROM Table

然后manually increment

e.g:

DECLARE max_id INT
SET @max_id = (SELECT MAX(id) FROM source_table)

DECLARE cursor_name CURSOR FOR
SELECT columns, to, copy
FROM source_table

OPEN cursor_name

FETCH NEXT FROM cursor_name
INTO @columns, @to, @cop

update e.g:

declare @i int  = SELECT ISNULL(MAX(interfaceID),0) + 1 FROM prices

update prices
set interfaceID  = @i , @i = @i + 1
where interfaceID is null

你可以理解这是多么复杂和原因 使用常量来存储该前缀的解决方案是正确的。

答案 2 :(得分:0)

Declare @str varchar(max) = '789-0000000'

Select 
   SUBSTRING ( @str ,0 ,CHARINDEX ( '-' ,@str  ))
   +'-'
   +
   (SUBSTRING ( @str ,(CHARINDEX ( '-' ,@str)+1) ,(7-LEN(CAST(SUBSTRING ( @str ,CHARINDEX ( '-' ,@str)+1,LEN(@str)) as int))
              )
    )+
   CAST(CAST(SUBSTRING ( @str ,CHARINDEX ( '-' ,@str)+1,LEN(@str)) as int)+1 as varchar))

@str='789-0001947'

输出@str= 789-0001948

您可以使用上述逻辑在表上编写更新触发器。

答案 3 :(得分:0)

DECLARE @base int = 0

更新TableX

设置 TableX.Value ='前缀'+ RIGHT('0000000'+ CAST(@base AS nvarchar),7), @base = @base +1

从 TableX