CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

!求助“将 nvarchar 值 ''1','10','11','3'' 转换为数据类型为 int 的列时发生语法错误。”

楼主zongsen(╃Coffee╃)2006-03-03 11:18:12 在 .NET技术 / C# 提问

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 的列时发生语法错误。

关键词

  • 语法
  • 转换
  • 语句
  • employeeid
  • nvarchar
  • 语法错误
  • bk
  • declare
  • varchar
  • cast

得分解答快速导航

  • 帖主:zongsen
  • xinyangt
  • daishengs

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo