CREATE procedure JJJ(@QSRQ smalldatetime,@QC varchar(50))
AS
begin
declare @sql Nvarchar(200)
set @sql='
select *
from '+@QC+' where RQ='+@QSRQ
EXEC (@sql)
end
GO
提示:
从字符串转换为 smalldatetime 数据类型时发生语法错误。
但如果将参数设置为字符型,又查不出数据
AS
begin
declare @sql Nvarchar(200)
set @sql='
select *
from '+@QC+' where RQ='+@QSRQ
EXEC (@sql)
end
GO
提示:
从字符串转换为 smalldatetime 数据类型时发生语法错误。
但如果将参数设置为字符型,又查不出数据
AS
begin
declare @sql Nvarchar(200)
set @sql='
select *
from '+@QC+' where RQ='''+cast(@QSRQ as varchar)+''''
EXEC (@sql)
end
GO
xyxfly的方法可以
但不知道为什么要这么多引号呢
AS
begin
declare @sql Nvarchar(200)
set @sql='
select *
from '+@QC+' where RQ='''+cast(@QSRQ as varchar)+''''
print @sql--这里加个print看看就明白了^_^
EXEC (@sql)
end
GO
单引号在SQL SERVER中是字符串的起始/终止符号
当语法分析器看到第一个单引号的时候就认为,他后面的就是一个字符串,直到遇到下一个单引号,表示这个字符串结束.
你后面的变量@QSRQ是一个字符串,但是拼装到动态SQL语句的时候,他自己没有被单引号括起来,所以必须增加单引号
在SQL SERVER中,用2个单引号表示一个单引号,就是说,你想把单引号作为一个普通符号使用,而不是SQL SERVER默认的"字符串的起始/终止符号",那么需要告诉SQL SERVER这是一个普通符号,不是特殊符号,语法格式就是2个单引号,这个时候,第一个单引号的作用不再是"字符串的起始/终止符号",而是转义字符,意思就是他后面的符号(一般都是特殊符号)现在只是一个普通的字符,相信转义字符你应该知道吧
--------------------
挖哈哈 ,写完了,好累
--------------
楼主,要给我1000分啊,谢谢
print @sql--这里加个print看看就明白了^_^怎么执行,在查询分析器里面没运行结果呢,怎么看@SQL(教教方法就没有下面的问题了)
上面那句话可以这样写不
'select * from '+@QC+' where RQ='+''+cast(@QSRQ as varchar)+''+''还有就是最后的四个''''怎么解释,难道是用4个单引号表示2个单引号?
还是后面的三个单引号都是普通的字符了呢
所以xyxfly的方法是正确的
楼主所不能理解的是为什么会出现'''和'''',这是因为'''表示在字符中增加一个'号,''''表示在字符串中增加两个'号
但是要加引号呢, +'''' 即 +' '' '中间两个引号相当于字符A,只不过引号要用转义字符,两个表示一个如果你写成+''+''就成了什么也没有了