考虑SQL Server 2012中的表
789-0000000
上述数字将被视为SQL Server 2012中的字符串,但每当我更新记录时,我都需要增加到1。
例如:
789-0000001
789-0000002
最后增量应仅为789- 0000000
答案 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.YourTable
或ID
的值时:
CompanyID
然后SQL Server将自动且安全地增加INSERT INTO dbo.YourTable(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)
值,而ID
将包含CompanyID
,789-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
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