!求助“将 nvarchar 值 ''1','10','11','3'' 转换为数据类型为 int 的列时发生语法错误。”
原帖:http://community.csdn.net/Expert/topic/4590/4590229.xml?temp=.7383081
刚才请教了大家一个问题,但还是不能达到要求。
按“横舟摆渡”说的:
SELECT filed1 FROM Employee WHERE @EmployeeID Like '%'+RTRIM(CAST(EmployeeID as nvarchar(10)))+',%'
这样可以执行,如果@EmployeeID ='1,12,13,17',那查询出来的结果里除包括这四个外,还可能有2,3,7的记录。
如果改成这样:
SELECT filed1 FROM Employee WHERE RTRIM(CAST(EmployeeID as nvarchar(10))) IN (@EmployeeID)
查询不出结果来。请大家帮忙看一下是什么原因,多谢!
问题点数:20、回复次数:16Top
1 楼zongsen(╃Coffee╃)回复于 2006-03-03 13:13:21 得分 0
大伙来帮帮忙啊。。。
xinyangt(信仰t),刚才在函数里不能建临时表,你看还有什么办法?Top
2 楼zongsen(╃Coffee╃)回复于 2006-03-03 13:53:54 得分 0
大家伙帮帮忙啊,着急啊:(Top
3 楼soaringbird()回复于 2006-03-03 13:56:38 得分 0
declare @employeeid varchar(10)
set @employeeid='1,12,13,17'
select id from t1 where patindex('%'+cast(id as varchar)+',%',@employeeid+',')>0
select id from t1 where @employeeid+',' like '%'+cast(id as varchar)+',%'Top
4 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:11:59 得分 0
select id from t1 where @employeeid+',' like '%'+cast(id as varchar)+',%'
这个上面已经说了,不准确.
上面那个我试试...Top
5 楼soaringbird()回复于 2006-03-03 14:19:33 得分 0
注意@employeeid+',' 比主贴里多个小尾巴Top
6 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:20:39 得分 0
这两句功能是一样的啊。
如果@EmployeeID='1,12,17,'
那结果里面ID是2和7的也将被查询出来。Top
7 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:21:21 得分 0
我再试试Top
8 楼soaringbird()回复于 2006-03-03 14:22:27 得分 0
那就在前面也加上','Top
9 楼soaringbird()回复于 2006-03-03 14:23:03 得分 0
select id from t1 where @employeeid+',' like '%,'+cast(id as varchar)+',%'Top
10 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:24:55 得分 0
还是一样,我现在@EmployeeID='1,17,'
结果里面ID是7的也将被查询出来了。
select EmployeeID from Employee where ',' + @EmployeeID + ',' like '%' + cast(EmployeeID as varchar) + ',%'Top
11 楼soaringbird()回复于 2006-03-03 14:28:43 得分 0
select id from t1 where ','+@employeeid+',' like '%,'+cast(id as varchar)+',%'
这样就行了。上面几个里面的逗号都加少了Top
12 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:28:47 得分 0
@EmployeeID='1,11,17,'
SELECT EmployeeID FROM Employee WHERE @EmployeeID LIKE '%,' + CAST(EmployeeID AS varchar) + ',%'
现在只能查出来11和17,1的查不到了。Top
13 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:29:49 得分 0
好了!
请问加逗号是什么原因?Top
14 楼soaringbird()回复于 2006-03-03 14:33:40 得分 20
你最后写的那个不行
where ','+@employeeid+',' like '%,'+cast(id as varchar)+',%'
','+@employeeid+',' 是保证第一个和最后一个元素也被前后两个逗号包围。
'%,'+cast(id as varchar)+',%'这样保证每个元素不进行半截子匹配
Top
15 楼zongsen(╃Coffee╃)回复于 2006-03-03 14:36:11 得分 0
知道了,结帖!Top
16 楼xinyangt(信仰t)回复于 2006-03-03 14:44:45 得分 0
其实 sql还是应该尽量用存储过程 这样层次好些 前台和后台也更独立Top
相关问题
- 将 nvarchar 值 'Label' 转换为数据类型为 int 的列时发生语法错误!??????
- !求助“将 nvarchar 值 ''1','10','11','3'' 转换为数据类型为 int 的列时发生语法错误。”
- vc到c#的语法转换问题!!!
- sqlserver与ACCESS语法替换,转换
- 简单的,vb语法到c#语法转换
- 请教简单的 C# 语法 转换为 VB.net 的语法
- "转换为数据类型为 int 的列时发生语法错误" 和 "列名无效"
- case when 中转换为数据类型为 int 的列时发生语法错误
- 将 varchar 值 '1,2,3,4,5,6' 转换为数据类型为 int 的列时发生语法错误
- 将 varchar 值 'bb ' 转换为数据类型为 int 的列时发生语法错误。




