MSSQL存储过程实现拼接sql的注意点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSSQL存储过程实现拼接sql的注意点相关的知识,希望对你有一定的参考价值。

  这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改。由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面。

这里就出现了一个问题,我花费了好久才弄通!

  其实就是很简单的一个SQL语句:

  update table1 set field1=value1,field2 = value2 where id = id

  我写成什么样子了呢?大家且看: 

  declare @tableName nvarchar(50),

      @field1 int,

      @field2 nvarchar,

      @id int
  declare @sql nvarchar(max)

  set @sql = update +@tableName+ set field1= +@field1+,field2= +@field2+ where id=+@id

  exec @sql

  有过这方面经验的同学肯定知道这样写明显是错的,sql会报异常,说无法讲nvarchar转换成int类型

  那么这个错误是具体是值什么呢?其实就是说,在拼接sql的时候,这个@sql要是一个字符串类型,所有的变量也都必须用字符串表示,我上面的@field1和@id是int,所以要转化成nvarchar类型,并且是nvarchar类型的变量(字段)必须用单引号括起来;注:在sql中单引号是用两个单引号表示的

  所以经过修改,正确的拼接sql代码是:

  

set @sql=update +@tableName+  set field1=+cast(@field1 as varchar)+,field2=‘‘‘+@field2+‘‘‘ where id=+CAST(@id as varchar)

  这个问题其实非常简单,但是由于我在SQL方面的知识很是不足,所以在这里记录来巩固自己

  

以上是关于MSSQL存储过程实现拼接sql的注意点的主要内容,如果未能解决你的问题,请参考以下文章

mysql 字符串分割 和 动态执行拼接sql

sql 存储过程如何动态拼接where后面的条件

mssql 语句判断,存储过程最好

SQL SERVER 存储过程执行带输出参数的SQL语句拼接

MSSQL 2005 存储过程中最大的文本可用变量?

mssql里的一个存储过程判断,请写出代码