日期:2014-05-19  浏览次数:20467 次

奇怪的sql存储过程问题
--你可以建立如下的测试环境,如果看不出来我的问题的所在
create   database   test_p
go
create   table   t
(
tId   int,
tName   varchar(50)
)
go
insert   t   values( '1 ', 'a ')  
insert   t   values( '2 ', 'b ')
insert   t   values( '3 ', '1 ')
go
select   *   from   t
use   test_p
go
create   procedure   P_test
(
@txtfield   varchar(50)
)
as
begin
exec( 'select   tId   from   t   where   tName= '+@txtfield+ ' ')
end
--为什么我运行下面的会出错呢?提示:“列名   'a '   无效。”
exec   p_test   'a '
--再运行下面的,又提示:“在将   varchar   值   'a '   转换成数据类型   int   时失败。”
exec   p_test   '1 '


上面的错误是为什么?!     'a '又为什么要转成int型?

------解决方案--------------------
create database test_p
go
create table t
(
tId int,
tName varchar(50)
)
go
insert t values( '1 ', 'a ')
insert t values( '2 ', 'b ')
insert t values( '3 ', '1 ')
go
select * from t
use test_p
go
create procedure P_test
(
@txtfield varchar(50)
)
as
begin
exec( 'select tId from t where tName= ' ' '+@txtfield+ ' ' ' ') --修改這裡
end
GO
exec p_test 'a '
exec p_test '1 '
------解决方案--------------------
exec( 'select tId from t where tName= ' ' '+@txtfield+ ' ' ' ')--兩個單引號代表一個 '