我需要为SQL Server表中的重复值生成序列号。
这是我的表
CREATE TABLE [dbo].[tbl_all_purple_flag_level](
[Sno] [int] IDENTITY(1,1) NOT NULL,
[Id] [varchar](50) NULL,
[Name] [varchar](50) NULL,
[Score] [varchar](50) NULL,
[Disability_Level] [varchar](50) NULL,
[visited_count] [varchar](50) NULL,
[Date] [varchar](50) NULL
)
如果id
重复了数字,我需要visited_count
作为序列号(1,2,3 ......)
我试过这段代码
SELECT
id,
RIGHT('0'+ CAST((ROW_NUMBER() OVER (Partition By id Order By id)) as varchar(2)), 2) as duplicate_id
FROM
tbl_all_purple_flag_level
它工作正常,但我不知道如何做触发器。谁能帮我?谢谢!
答案 0 :(得分:1)
ALTER TRIGGER tr_After_Update_Inser
ON [dbo].[tbl_all_purple_flag_level]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
WITH Updateable
AS
(
SELECT [Sno], id, [visited_count],
RIGHT('0'+ CAST((ROW_NUMBER() OVER (Partition By id Order By id, [Date] DESC)) as varchar(2)), 2) as duplicate_id
FROM tbl_all_purple_flag_level
)
UPDATE Updateable
SET [visited_count] = duplicate_id
END
有一点我想指出,SQL Server有数据类型来存储几乎所有类型的数据,我可以看到你在Varchar数据类型和ID中保存日期并且在varchar数据类型中得分全部,Sql Server有{ {1}}用于存储日期值的数据类型。为什么你会为所有列使用varchar而不知道,但我认为你应该考虑为你的列使用适当的数据类型而不是使用VARCHAR。