model name更改为不允许重复, 原来重复的model name则需要提供sql script处理(可加后缀"_"區分)

本文介绍了一个用于解决 SQL Server 中重复 ModelName 的存储过程。该过程通过在重复的 ModelName 后添加序号的方式进行区分,使用了游标及计数器实现逐条更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SQL server里时不区分大小写的

ItemID     ModelName      Status --------想整成这样------ItemID       ModelName     Status

1               marytest           testing                                        1        marytest                    testing     

2               MaryTest          testing                                        2        MaryTest _1              testing

3               mm                   testing                                        3        mm                             testing

4               MARYTEST      testing                                        4       MARYTEST_2           testing


SO 我写了一个存储过程来执行

游标跳过第一行,对第二行进行处理。故用了两次FETCH NEXT

CREATE PROCEDURE UpdateBMSITEMNAME
AS
BEGIN
DECLARE @item_id   int
DECLARE @item_name nvarchar(500)
DECLARE @qty       int
DECLARE @no        int
DECLARE main_cursor CURSOR FOR
		SELECT MODELNAME,COUNT(*) AS QTY FROM BMSItem GROUP BY MODELNAME HAVING COUNT(*)>1
OPEN main_cursor
FETCH NEXT FROM main_cursor INTO @item_name,@qty
WHILE ((@@FETCH_STATUS) =0)
BEGIN
	SET @no=0
	DECLARE line_cursor CURSOR FOR
		SELECT ITEMID FROM BMSITEM WHERE MODELNAME=@item_name
	OPEN line_cursor
	FETCH NEXT FROM line_cursor INTO @item_id
	FETCH NEXT FROM line_cursor INTO @item_id
	WHILE ((@@FETCH_STATUS)=0)
	BEGIN
		print 'item_id'
		print @item_id
		set @no = @no + 1
		UPDATE BMSITEM SET MODELNAME=MODELNAME+'_'+CONVERT(NVARCHAR(50),@no) WHERE ITEMID=@item_id
		FETCH NEXT FROM line_cursor INTO @item_id
	END
	CLOSE line_cursor
	DEALLOCATE line_cursor

	FETCH NEXT FROM main_cursor INTO @item_name,@qty
END
CLOSE main_cursor
DEALLOCATE main_cursor
END






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值