sqlserver存储过程

  1. 游标和存储过程的结合使用:

 
 
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] as
5。拼接字符串时,出现:将nvarchar值转换成数据类型int失败。
解决方法1:将非字符串类型的变量转换为字符串类型,SET @a= @a + convert(nvarchar(10),100);
解决方法2:在存储过程开始定义的时候,将参数定义为字符串类型

猜你喜欢

转载自blog.csdn.net/baidu_39355821/article/details/80167889