MSSQL存储过程实现拼接sql的注意点
2016-07-05 09:35
351 查看
这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改。由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面。
这里就出现了一个问题,我花费了好久才弄通!
其实就是很简单的一个SQL语句:
update table1 set field1=value1,field2 = value2 where id = id
我写成什么样子了呢?大家且看:
有过这方面经验的同学肯定知道这样写明显是错的,sql会报异常,说无法讲nvarchar转换成int类型
那么这个错误是具体是值什么呢?其实就是说,在拼接sql的时候,这个@sql要是一个字符串类型,所有的变量也都必须用字符串表示,我上面的@field1和@id是int,所以要转化成nvarchar类型,并且是nvarchar类型的变量(字段)必须用单引号括起来;注:在sql中单引号是用两个单引号表示的
所以经过修改,正确的拼接sql代码是:
这个问题其实非常简单,但是由于我在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方面的知识很是不足,所以在这里记录来巩固自己
相关文章推荐
- win2008 r2 iis7.5 中 access 数据库伪静态设置
- sql PivotTable
- 怎么用MySQL命令行导入sql数据库
- mysql两个日期之差 止付与冻结 2016.07.04回顾
- sql server数据库的备份和还原
- MySQL 常见错误分析与解决方法
- SQLSERVER 数据库时间格式获取对应表
- C# SQlite操作方法小结
- HAWQ ——功能强大的SQL-on-Hadoop引擎
- Spring Memcache配置及缺少com.danga的解决
- oracle 12170:tns:连接超时
- Doma 参数传入至sql文中 , 模糊查询 和if 判断
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
- SQL 实战学习及优化
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
- windows下Mysql5.6的安装
- 正则表达式与SQL笔记
- LAMP--1.Mysql 安装
- memcached 适用的场景
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁