DECLARE @id int
declare @cont varchar(max)
declare @temp varchar(max)
DECLARE curs CURSOR FOR SELECT id, [content] FROM [dbo].[Contents]
OPEN curs
FETCH NEXT FROM curs into @id, @cont
WHILE @@FETCH_STATUS = 0
BEGIN
SET @temp = replace(@cont, @param_ReplaceThis, @param_WithReplacement)
update [dbo].[Contents]
set [Content] = @temp
where id = @id;
FETCH NEXT FROM curs into @id, @cont;
END;
CLOSE curs;
DEALLOCATE curs;
但我总是得到错误消息,它不允许在函数中使用'UPDATE'...我只是认为这些东西在Oracle上正常工作......
答案 0 :(得分:6)
为什么将游标用于basicaly是一个简单的set操作?
UPDATE [dbo].[Contents]
SET [Content] = replace([Content], @param_ReplaceThis, @param_WithReplacement)
进一步回答您的问题,您可以在DECLARE CURSOR语句中添加FOR UPDATE [OF column_name,...]。如果省略[OF column name,...],则所有列都可以更新。
答案 1 :(得分:1)
您是将其创建为存储过程:
创建程序?或者作为CREATE FUNCTION ??
您必须使用CREATE PROCEDURE来允许这种程序逻辑。
对不必要的光标注释+1。
答案 2 :(得分:0)
当您打算构建存储过程时,听起来好像是将其构建为用户定义函数。
答案 3 :(得分:0)
SQL Server中的用户定义函数无法更改数据库状态。您必须使用存储过程;如果需要返回值,请使用OUTPUT参数。