奇怪的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+ ' ' ' ')--兩個單引號代表一個 '