SQL 游标有效但数据库不保存更改
SQL cursor works but db doesn't save changes
我有一个 table,其中有不需要的字符 (Ý),我想用 "I" 替换它。在我为另一个列名尝试该代码之前,它工作得很好。但是现在在调试时我可以看到它修复了行但是最后数据库没有变化......这是我的代码如下:
DECLARE @CARI_NAME varchar(100)
DECLARE CRS_FixCariNameCURSOR FOR
SELECT CARI_NAME FROM TBLCASABIT
OPEN CRS_CariIsimDuzelt
FETCH NEXT FROM CRS_FixCariNameINTO @CARI_NAME
WHILE @@FETCH_STATUS=0
BEGIN
IF @CARI_NAME LIKE '%Ý%'
UPDATE TBLCASABIT SET @CARI_NAME = REPLACE(@CARI_NAME ,'Ý','I')
WHERE CURRENT OF CRS_FixCariName
FETCH NEXT FROM CRS_FixCariNameINTO @CARI_NAME
END
CLOSE CRS_FixCariName
DEALLOCATE CRS_FixCariName
和UPDATE TBLCASABIT SET @CARI_NAME = REPLACE(@CARI_NAME ,'Ý','I')
您更新了变量而不是列!
使用:
UPDATE TBLCASABIT SET CARI_NAME = REPLACE(@CARI_NAME ,'Ý','I')
如果您要更新的列名为 CARI_NAME
但更重要的是 - 你为什么还要在这里使用光标?
简单更新做同样的工作更有效(如果我错了请纠正我):
UPDATE TBLCASABIT
SET CARI_NAME = REPLACE(CARI_NAME ,'Ý','I')
WHERE CARI_NAME LIKE '%Ý%'
我有一个 table,其中有不需要的字符 (Ý),我想用 "I" 替换它。在我为另一个列名尝试该代码之前,它工作得很好。但是现在在调试时我可以看到它修复了行但是最后数据库没有变化......这是我的代码如下:
DECLARE @CARI_NAME varchar(100)
DECLARE CRS_FixCariNameCURSOR FOR
SELECT CARI_NAME FROM TBLCASABIT
OPEN CRS_CariIsimDuzelt
FETCH NEXT FROM CRS_FixCariNameINTO @CARI_NAME
WHILE @@FETCH_STATUS=0
BEGIN
IF @CARI_NAME LIKE '%Ý%'
UPDATE TBLCASABIT SET @CARI_NAME = REPLACE(@CARI_NAME ,'Ý','I')
WHERE CURRENT OF CRS_FixCariName
FETCH NEXT FROM CRS_FixCariNameINTO @CARI_NAME
END
CLOSE CRS_FixCariName
DEALLOCATE CRS_FixCariName
和UPDATE TBLCASABIT SET @CARI_NAME = REPLACE(@CARI_NAME ,'Ý','I')
您更新了变量而不是列!
使用:
UPDATE TBLCASABIT SET CARI_NAME = REPLACE(@CARI_NAME ,'Ý','I')
如果您要更新的列名为 CARI_NAME
但更重要的是 - 你为什么还要在这里使用光标? 简单更新做同样的工作更有效(如果我错了请纠正我):
UPDATE TBLCASABIT
SET CARI_NAME = REPLACE(CARI_NAME ,'Ý','I')
WHERE CARI_NAME LIKE '%Ý%'