Sql server Transact-SQL:如何更新字符串的一部分
我需要更新SQL Server中的一些记录。事实上,我需要删除字符串的一部分并更新相同的记录。我已经做了以下工作:Sql server Transact-SQL:如何更新字符串的一部分,sql-server,cursor,substring,Sql Server,Cursor,Substring,我需要更新SQL Server中的一些记录。事实上,我需要删除字符串的一部分并更新相同的记录。我已经做了以下工作: USE [BRAZIL] DECLARE @PRODUCTDESCRIPTION nvarchar(max); DECLARE @MERDA nvarchar(max); DECLARE @CONTADOR Int; DECLARE C CURSOR READ_ONLY FOR SELECT DISTINCT Id FROM ProductVariant
USE [BRAZIL]
DECLARE @PRODUCTDESCRIPTION nvarchar(max);
DECLARE @MERDA nvarchar(max);
DECLARE @CONTADOR Int;
DECLARE C CURSOR READ_ONLY FOR
SELECT DISTINCT Id
FROM ProductVariant
OPEN C
FETCH NEXT FROM C INTO @CONTADOR
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @PRODUCTDESCRIPTION = (SELECT Description
FROM ProductVariant
WHERE ID = @CONTADOR );
IF CHARINDEX('This Should be Removed', @PRODUCTDESCRIPTION) > 0
BEGIN
SET @MER = (SELECT SUBSTRING(@PRODUCTDESCRIPTION, 0, CHARINDEX('This Should be Removed', @PRODUCTDESCRIPTION)));
UPDATE ProductVariant
SET Description = @MER
END
SET @PRODUCTDESCRIPTION = '';
FETCH NEXT FROM C INTO @CONTADOR
END
CLOSE C
DEALLOCATE C
如果没有满足模式“应删除”的记录,则表上不会发生任何事情。这太棒了。但是,如果只有一条记录具有“应删除此记录”
,则所有其他记录都将使用此记录的相同值进行更新
有人能帮我吗?我做错了什么?这可以在一条语句中完成,无需使用光标:
UPDATE ProductVariant
SET Description = REPLACE(Description, 'This Should be Removed', '')
REPLACE
函数查找“应删除此项”,如果找到,将用空白字符串替换。如果说明不包含“应删除此项”,则说明不会更改
当前代码正在更新每条记录,因为update语句没有where子句:
UPDATE ProductVariant
SET Description = @MER
您需要添加,其中Id=@CONTADOR
,但最好在一条语句中添加。您当前的代码实际上是在while循环的每次迭代中更新整个表,并将整个表的description列设置为while循环中当前Id的description
在为数据库编程时,首先要了解的可能也是最重要的一点是,您希望处理整组行,而不是单独处理每一行。这可以在单个语句中完成,而无需使用光标:
UPDATE ProductVariant
SET Description = REPLACE(Description, 'This Should be Removed', '')
REPLACE
函数查找“应删除此项”,如果找到,将用空白字符串替换。如果说明不包含“应删除此项”,则说明不会更改
当前代码正在更新每条记录,因为update语句没有where子句:
UPDATE ProductVariant
SET Description = @MER
您需要添加,其中Id=@CONTADOR
,但最好在一条语句中添加。您当前的代码实际上是在while循环的每次迭代中更新整个表,并将整个表的description列设置为while循环中当前Id的description
在为数据库编程时,需要了解的第一件也是可能最重要的一件事是,您希望处理整个行集合,而不是单独处理每一行