这里有新鲜出炉的 SQL Server 教程,程序狗速度看过来!
SQL 是英文 Structured Query Language 的缩写,意思为结构化查询语言。SQL 语言的主要功能就是同各种数据库建立联系,进行沟通。按照 ANSI(美国国家标准协会) 的规定,SQL 被作为关系型数据库管理系统的标准语言。
SQL Server 即 Microsoft SQL Server 。
这篇文章主要介绍了 SqlServer 存储过程实现及拼接 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 方面的知识很是不足,所以在这里记录来巩固自己。
以上所述是小编给大家介绍的 SqlServer 存储过程实现及拼接 sql 的注意点,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0818/339300.html