说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请教这两个语句不同在哪里???

编辑:说三道四文库 发布时间:2018-08-17 08:41
HTML文档下载 WORD文档下载 PDF文档下载
在我的存储过程中有下面两个语句

SELECT A,B
FROM table
WHERE (A LIKE @a) AND (B = @b) AND 
      (C = @c) AND (D= @d) AND (E='y')

EXEC('select A,B from table where A like'+ @a+' and B= '+@b+' and  C= '+@c+' and D= '+@d+' and E='+'''y'''
为什么上面的EXEC()和select 的结果不一样呢???
EXEC()可以得到正确的值。
--试试第二句改为
exec('select A,B from table where A like '''
+ @a+''' and B='''+@b+''' and  C= '''+@c+''' and D='''+@d+''' and E=''y'''
你的参数是怎样传递的?

create table t1 (a char(10),b char(10))
insert t1 values('asdfgh','zxcvb')
insert t1 values('qwert','yuiop')
insert t1 values('hj123gd','yui45')

declare @a varchar(10)
set @a = 'a'
exec('select * from t1 where a like '+@a)    -- 注意当成 where a like a 即 字段 like 字段
set @a = 'yu'
exec('select * from t1 where a like '+@a)  

a          b          
---------- ---------- 
asdfgh     zxcvb     
qwert      yuiop     
hj123gd    yui45     

服务器: 消息 207,级别 16,状态 3,行 1
Invalid column name 'yu'.
SELECT A,B
FROM table
WHERE (A LIKE '%'+@a+'%') AND (B = @b) AND 
      (C = @c) AND (D= @d) AND (E='y')

EXEC('select A,B from table where A like'''+ @a+''' and B= '''+@b+''' and  C= '''+@c+''' and D= '''+@d+''' and E='+'''y'''

 楼上说的对.

 第二种方式是动态SQL, 需要根据列的属性调整SQL赋值,例如是
 varchar类型,变量前后就应该加单引号
第二种方式是动态SQL,使用起来更加灵活!
--问题应该出在你的变量定义上,你用下面的试试:

create PROCEDURE [pro_V]
(@a varchar(25)='''1%''',
@b varchar(10)='''123''',
 @c varchar(3)='''E''',
 @d  varchar(3)='''P'''
 )
 
AS  
 SELECT A,B
FROM table
WHERE (A LIKE @a) AND (B = @b) AND 
      (C = @c) AND (D= @d) AND (E='y')

EXEC('select A,B from table where A like'+ @a+' and B= '+@b+' and  C= '+@c+' and D= '+@d+' and E='+'''y'''

--上面的错了,真实的原因是(为了方便说明问题,我调整了一下格式):
create PROCEDURE [pro_V]
@a char(25)='''1%''',
@b char(10)='''123''',
@c char(3)='''E''',
@d  char(3)='''P'''
AS  
SELECT A,B FROM [table]  --这里应该是表名
WHERE A LIKE @a          --这里,@a的值是'1%',而正常的应该是1%,所以结果与下面不同
AND B=@b AND C=@c AND D=@d AND E='y'

EXEC('select A,B from table where A like'
+@a+' and B='+@b+' and  C='+@c+' and D='+@d+' and E=''y''')
go
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘