create table #TB_QF(Area nvarchar(128),
DBname varchar(100),
[File] nvarchar(200),
        File1 nvarchar(200),
Mo varchar(100),
Qfy varchar(100),
Service_id varchar(100),
        Qfy_content varchar(400))
--select * from #TB_QF
declare @Area varchar(100)
declare @DBname varchar(100)
declare @File varchar(100)
declare @File1 varchar(100)
declare @Mo varchar(100)
declare @Qfy varchar(100)
declare @Svc_id varchar(100)
declare @Qfy_content varchar(400)declare my_cursor cursor for 
select area,DBname,[file],mo,qfy from #TB2
open my_cursor
fetch next from my_cursor into @Area,@DBname,@File,@File1,@Mo,@Qfy
while @@fetch_status=0
begin
      insert into #TB_QF(Area,DBname,[File],File1,Mo,Qfy,Service_id,Qfy_content)
      exec('
      select Area='''+@Area+''',
           DBname='''+@DBname+''',
           [File]='''+@File+''',
           File1='''+@File1+''',
           Mo='''+@Mo+''',
           Qfy='''+@Qfy+''',
           Service_id=b.service_id,
           Qfy_content=a.content
        from (select content  
             from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Text;HDR=YES;DATABASE='+@File1+''','+@Qfy+'#txt)) a,
             test.dbo.service b
        where charindex(b.service_id,a.content)<>0'
        )
        
truncate table #TB_QFfetch next from my_cursor into @Area,@DBname,@File,@File1,@Mo,@Qfyendclose my_cursorDEALLOCATE my_cursor
-------------------错误信息:
服务器: 消息 16924,级别 16,状态 1,行 13
Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。
请帮我看看错在哪里,谢谢啦!!

解决方案 »

  1.   

    declare my_cursor cursor for 
    select area,DBname,[file],mo,qfy from #TB2
    改为:
    declare my_cursor cursor for 
    select area,DBname,[file],file1,mo,qfy from #TB2
      

  2.   

    或者fetch next from my_cursor into @Area,@DBname,@File,@File1,@Mo,@Qfy
    改为
    fetch next from my_cursor into @Area,@DBname,@File,@Mo,@Qfy
    ;)
      

  3.   

    定义游标的时候少了一个file1
    declare my_cursor cursor for 
    select area,DBname,[file],mo,qfy from #TB2
                             ^
                             |
                             file1
      

  4.   

    谢谢楼上,
    可是现在改过来了,又出现了新的错误:服务器: 消息 8501,级别 16,状态 3,行 2
    服务器 'USER-53ACFA05BF' 上的 MSDTC 不可用。----------请问谁知道这是什么错误,'USER-53ACFA05BF'是我sql server服务器实例名!
      

  5.   

    没遇到过,网上找篇文章,看看能不能解决你问题
    ================================================================================
    在 windows 2003 中启用分布式事务时候经常会遇到很多乱七八糟的问题,比如: 失去了与事务管理器的连接。 
    服务器 '%Server%' 上的 MSDTC 不可用。 
    该伙伴事务管理器已经禁止了它对远程/网络事务的支持。 
    还有最bt的就是:此事务已明地或暗地被确认或终止。 
    .... 下面将我的经验介绍给大家,欢迎大家一起讨论。 我在测试的时候,数据库是单独的一台机器,也碰到了上述部分问题。在解决问题的过程中,我在 google 和 MSDN 上搜索了很长时间,找到的文章倒是提出了很多解决方法,其中讲述的比较详细的文章有: HOWTO: Enable DTC Between Web Servers and SQL Servers Running Windows Server 2003 
    INFO: Configuring Microsoft Distributed Transaction Coordinator (DTC) to Work Through a Firewall 
    解决“COM+ 无法与 Microsoft 分布式事务协调程序交谈”的问题 
    上述讲述的方法主要包括: 
    在“添加或删除程序”的“添加/删除 Windows 组件”中安装“启用网路 DTC 访问” 
    启用 NETBIOS 访问 
    在 Sql Server 服务器上禁用 MSDTC 服务的 Rpc Security 
    等等... 可是,在尝试了上述方法后还是同样的报错。真是像网上说的“被 COM+ 给彻底打败了”。 然后,我进行了以下的尝试: 在命令行下运行 msdtc -uninstall,删除 msdtc(Distributed Transaction Coordinator)服务 
    在“本地连接”的属性中删除了 NetBIOS 协议 
    重新启动机器后,在命令行下运行 msdtc -install,安装 msdtc 服务。 
    Note: 以上步骤在数据库服务器和代码运行机器上相同。 
    在数据库服务器上,在“组件服务”mmc中,依次打开“组件服务”、“计算机”,在“我的电脑”上点右键选择“属性”。 然后选择“msdtc”选项卡中的“安全配置”,确认选中“网络 DTC 访问”,并选择“不要求进行验证”。 
    然后再次尝试运行代码,一切都顺利通过 :) 。 之所以要选择“不要求进行验证”,是因为我发现在“系统”日志中有 DCOM 的错误信息: 启动 DCOM 服务器的访问被拒绝。 服务器是: {00020906-0000-0000-C000-000000000046} 
    用户是 ANONYMOUS LOGON/NT AUTHORITY, SID=S-1-5-7. 
    但是选择不进行验证,肯定不是一个很好的解决方案。还有没有更好的解决方案,还望大家不吝赐教!