- 游标和存储过程的结合使用:
CREATE PROCEDURE test_p AS BEGIN DECLARE @a VARCHAR(1000);--定义变量时长度尽可能设大,否则会导致数据存储不完全 DECLARE @newid VARCHAR(100); DECLARE c CURSOR FOR SELECT DISTINCT a FROM XXX WHERE aa = ''--定义游标 OPEN c--打开游标 FETCH NEXT FROM c INTO @a--读取游标 WHILE @@fetch_status = 0--读取成功 BEGIN SET @newid = newid()--当对多条数据进行更新时,newid会重新生成,如果想对多条数据更新为一样的值,可以定义变量进行存储 PRINT @a UPDATE XXX SET aa = @newid WHERE a= @a; FETCH NEXT FROM c INTO @a--读取游标(重要,否则将导致死循环,重复读取第一行) END CLOSE c--关闭游标 DEALLOCATE c--删除游标 END
2。调用存储过程:EXEC test_p
3。删除存储过程:DROP PROCEDURE test_p
4。查看所有存储过程或视图的位置及内容:
select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in ('P','V','AF') order by a.[name] as5。拼接字符串时,出现:将nvarchar值转换成数据类型int失败。
解决方法1:将非字符串类型的变量转换为字符串类型,SET @a= @a + convert(nvarchar(10),100);
解决方法2:在存储过程开始定义的时候,将参数定义为字符串类型