今天在写一个存储过程,写到查询某个表的语句的where条件时产生了一个不解的疑惑
这是我写的存储过程的其中一段代码
set @sql=@sql+' where is_zx='''+convert(nvarchar,@Is_zx)+''''
即声明一个叫@sql的语句,is_zx是一个列的名称,@Is_zx是传进来的一个参数
我想问的很简单,为什么参数的两边要加那么多个单引号,为何不能写成这样
set @sql=@sql+' where is_zx='+convert(nvarchar,@Is_zx)
跟编程语言一样简单明了,而且我也不明白上面那些单引号是那个对那个,只知道这么写才不会报错
不解望指教,谢了
这是我写的存储过程的其中一段代码
set @sql=@sql+' where is_zx='''+convert(nvarchar,@Is_zx)+''''
即声明一个叫@sql的语句,is_zx是一个列的名称,@Is_zx是传进来的一个参数
我想问的很简单,为什么参数的两边要加那么多个单引号,为何不能写成这样
set @sql=@sql+' where is_zx='+convert(nvarchar,@Is_zx)
跟编程语言一样简单明了,而且我也不明白上面那些单引号是那个对那个,只知道这么写才不会报错
不解望指教,谢了
解决方案 »
- iif语句改写成case when then else 语句
- 请问:将数据表A insert into 数据表B中,SQL提示:'截断二进制数据或字符串,语句终止'!
- my sql 递归查询在dao的实现类里写
- 紧急求救!!
- 为什么打开SQLServer2k的数据库列表非常慢?
- 关于取百分比的问题,取集合中的一定百分率数据的集合?
- 如何在sql server 中插入音频和图象 的代码(用脚本)
- SQL比较牛的请进!
- 模糊查询 表A中有一些记录如 "12??5" ,"1?3?5","?2???" ,寻查询的SQL语句!
- sql server2000 的内码问题(急,在线等待)
- 大家讨论下:怎么设计一个数据库的表有更大的灵活性和通用性和可扩展性
- 关于SQL联合查询的问题
--print 就清楚了
declare @sql varchar(200)
declare @is_zx int
select @sql='',@is_zx=2009
set @sql=@sql+' where is_zx='''+convert(nvarchar,@Is_zx)+''''
print @sql
/*
where is_zx='2009'
*/
一般的,三个连续的单引号可以标识一个实际的单引号,4个连续单引号标识一个空字符串,也就是''.
SET @sql='SELECT * FROM TB'
DECLARE @Is_zx NVARCHAR(4000)
SET @Is_zx='A'
set @sql=@sql+' where is_zx='''+convert(nvarchar,@Is_zx)+''''
PRINT @sql/*
SELECT * FROM TB where is_zx='A'
*/这样一看就清楚了,主要是字符型应该要用引号引起的,
执行
select @sql
输出@sql的结果,再把结果copy到查询分析器中去执行,就会明白为什么。