这两天的项目中写了一个存储过程,用表名做变量的,涉及到动态Sql的一些东西,把自己走过的弯路记录一下,希望和我有同样经历的朋友少走些弯路。
     首先如果用表名做变量,则必须使用动态sql,否则存储过程会报错。
     如果要执行完动态Sql后得到返回值,则存放动态Sql的变量必须定义为nvarchar或ntext类型。我开始就是定义的varchar类型,结果连续报错。
     要想从动态Sql中得到返回值,直接用下面的语句是不行的:
    


                + @scoreTable 
                
+ ' where id=' + cast(@id as varchar(10)) 
                
+ ' and [type]=' + cast(@type as varchar(10))
exec @sql

 

必须使用下面的方式才可以:

                + @scoreTable 
                
+ ' where id=' + cast(@id as varchar(10)) 
                
+ ' and [type]=' + cast(@type as varchar(10))                
exec sp_executesql @sql,N'@currScore int output,@version timestamp output',@currScore output,@version output
 还有一点需要注意:一是动态Sql中整形变量都要转成字符型,这里我把整形的都转成字符型了。还有时间戳型变量先转换成bigint再转换成字符串

 

 

相关文章:

  • 2021-11-29
  • 2022-12-23
  • 2022-02-11
  • 2021-12-12
  • 2022-01-21
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
相关资源
相似解决方案