!求助“将 nvarchar 值 ''1','10','11','3'' 转换为数据类型为 int 的列时发生语法错误。”
SQL语句如下:
declare @EmployeeID nvarchar(100)
select @EmployeeID= '1,10,11,3,'
SELECT @EmployeeID = '''' + REPLACE(LEFT(@EmployeeID,(LEN(@EmployeeID)-1)),',',''',''') + ''''
SELECT [Name] FROM Employee WHERE EmployeeID IN(@EmployeeID)
执行出现如下错误,实在是搞不懂怎么回事了。
将 nvarchar 值 ''1','10','11','3'' 转换为数据类型为 int 的列时发生语法错误。
这样执行就不会出错:
SELECT @EmployeeID = 'SELECT [Name] FROM Employee WHERE EmployeeID IN(' + @EmployeeID + ')'
exec (@EmployeeID)
可是我要在游标里用,不能用EXEC。
问题点数:20、回复次数:11Top
1 楼zhongkeruanjian(编程亮子)回复于 2006-03-03 11:30:42 得分 0
SELECT @EmployeeID = '''' + REPLACE(LEFT(@EmployeeID,(LEN(@EmployeeID)-1)),',',''',''') + ''''
你看看 @EmployeeID 是什么值;估计是''1','10','11','3''
这个值能转INT吗?Top
2 楼zongsen(╃Coffee╃)回复于 2006-03-03 11:39:14 得分 0
我要的就是这个值。
这样才能构成下面的语句。
SELECT [Name] FROM Employee WHERE EmployeeID IN('1','10','11','3')Top
3 楼xinyangt(信仰t)回复于 2006-03-03 11:45:11 得分 5
建立一个临时表就方便实现了
declare @EmployeeID varchar(1024),
set @EmployeeID ='1,10,11,3'
declare @ID varchar(1024)
create table #array_Bk (id int identity,value varchar(32))
set @EmployeeID='insert #array_Bk select '''+replace(@EmployeeID,',','''as str union all select ''')+''''
exec(@EmployeeID)
declare List cursor for
select value from #array_Bk
open List
while(1=1)
begin
fetch next from List into @ID
if(@@FETCH_STATUS<>0)break
select [Name] form Employee where EmployeeID=convert(numeric,@ID)
end
close List
deallocate List
drop table #array_Bk
/* sql根据你的具体需要你再修改修改吧 */Top
4 楼daishengs(横舟摆渡)回复于 2006-03-03 12:00:45 得分 0
declare @EmployeeID nvarchar(100)
select @EmployeeID= '1,10,11,3,'
SELECT @EmployeeID = '''' + REPLACE(LEFT(@EmployeeID,(LEN(@EmployeeID)-1)),',',''',''') + ''''
SELECT [Name] FROM Employee WHERE @EmployeeID Like cast(EmployeeID as varchar(10))+',%'Top
5 楼daishengs(横舟摆渡)回复于 2006-03-03 12:02:41 得分 0
应该为:declare @EmployeeID nvarchar(100)
select @EmployeeID= '1,10,11,3,'
SELECT @EmployeeID = '''' + REPLACE(LEFT(@EmployeeID,(LEN(@EmployeeID)-1)),',',''',''') + ''''
SELECT [Name] FROM Employee WHERE @EmployeeID Like '%'+cast(EmployeeID as varchar(10))+',%'
Top
6 楼lovvver(ElephantTalk.Bright)回复于 2006-03-03 12:02:45 得分 0
最好全用动态语句,然后跟踪一下最后构造成的语句是怎样的,到底有没有语法错误,一看就知道。感觉不会是NVARCHAR转换为int的问题。Top
7 楼daishengs(横舟摆渡)回复于 2006-03-03 12:04:12 得分 15
应该为:declare @EmployeeID nvarchar(100)
select @EmployeeID= '1,10,11,3,'
SELECT [Name] FROM Employee WHERE @EmployeeID Like '%'+cast(EmployeeID as varchar(10))+',%'Top
8 楼daishengs(横舟摆渡)回复于 2006-03-03 12:05:09 得分 0
哈哈,我最后一个应该可以的,我以前就是这么解决的。Top
9 楼zongsen(╃Coffee╃)回复于 2006-03-03 12:07:29 得分 0
非常感谢!
但我是在一个用户自定义函数里用,函数里不让用临时表:(Top
10 楼zongsen(╃Coffee╃)回复于 2006-03-03 12:11:27 得分 0
横舟摆渡:
SELECT [Name] FROM Employee WHERE @EmployeeID Like '%'+rtrim(cast(EmployeeID as nvarchar(10)))+',%'
成功了!Top
11 楼zongsen(╃Coffee╃)回复于 2006-03-03 12:57:45 得分 0
这样有一个问题啊
如果@EmployeeID ='1,12,13,17'
那查询出来的结果里除包括这四个外,还可能有2,3,7的记录。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 的列时发生语法错误。




