Cursorfetch: INTO 列表中声明的变量数目必须与所选列的数目相同

buzhunmeiyouni 2017-09-18 10:05:20
create proc p_contact
as
declare @fcmn varchar(100)
declare @dbid varchar(200)
declare @fan varchar(200)
declare @sql varchar(2000)
Declare Table_contact cursor for --定义游标
select cpname,AccountName from T_unit_account
open table_contact--打开游标
fetch next from Table_contact into @fcmn,@fan,@DBID-- 匹配第一条记录
while (@@FETCH_STATUS=0)-- 读取游标状态,循环
begin
set @sql ='insert into datacollection.dbo.t_rp_contact
(FID,FPeriod,FRP,FType,FDate,FFincDate,
FNumber,FCustomer,FDepartment,FEmployee,FCurrencyID,FExchangeRate,FAmount,FAmountFor
,FRemainAmount,FRemainAmountFor,FContractNo,FInvoiceID,FRPBillID,FBillID,FBegID,
FExpenseID,FBussinessDiscount,FCashDiscount,FRPDate,FSuperDays,FDirectSale,FSaleBackAmount,
FSaleBackAmountFor,FDue,FIsBad,FBadReason,FVoucherID,FGroupID,FAccountID,FIsInit,
FStatus,FPost,FToBal,FPre,FK3Import,FInterestRate,FCheckType,FBillType,FInvoiceType,
FItemClassID,FExplanation,FSmInvID,FPreparer,UUID,FCompanyName,Faccountname)
select
FID,FPeriod,FRP,FType,FDate,FFincDate,
FNumber,FCustomer,FDepartment,FEmployee,FCurrencyID,FExchangeRate,FAmount,FAmountFor
,FRemainAmount,FRemainAmountFor,FContractNo,FInvoiceID,FRPBillID,FBillID,FBegID,
FExpenseID,FBussinessDiscount,FCashDiscount,FRPDate,FSuperDays,FDirectSale,FSaleBackAmount,
FSaleBackAmountFor,FDue,FIsBad,FBadReason,FVoucherID,FGroupID,FAccountID,FIsInit,
FStatus,FPost,FToBal,FPre,FK3Import,FInterestRate,FCheckType,FBillType,FInvoiceType,
FItemClassID,FExplanation,FSmInvID,FPreparer,UUID,'''+@fcmn+''','''+@fan+'''
from '+@dbid+'.dbo.t_rp_contact trpc
where not exists(select 1 from datacollection.dbo.t_rp_contact trp where trp.FCompanyName='''+@fcmn+''',trp.Faccountname='''+@fcmn+''' and trp.FID=trpc.FID)'
exec(@sql)
fetch next from Table_contact into @fcmn,@fan,@dbid
end

报错
Cursorfetch: INTO 列表中声明的变量数目必须与所选列的数目相同
...全文
1983 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2017-09-18
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
SELECT  cpname ,   --这里读取了两条
        AccountName
FROM    T_unit_account
OPEN table_contact
FETCH NEXT FROM Table_contact INTO @fcmn, @fan, @DBID--	这里是三个变量
版主正解,很简单的道理,你有两个东西,我现在命令你把它俩放到三个篮子里,那是不是就一定有一个篮子是空的(也就是报错)。就好比你的 cpname ,AccountName放到@fcmn, @fan, @DBID里面一样的道理
二月十六 2017-09-18
  • 打赏
  • 举报
回复
引用 2楼二月十六 的回复:
SELECT  cpname ,   --这里读取了两条
AccountName
FROM T_unit_account
OPEN table_contact
FETCH NEXT FROM Table_contact INTO @fcmn, @fan, @DBID-- 这里是三个变量
两条=>两个字段
繁花尽流年 2017-09-18
  • 打赏
  • 举报
回复
select cpname,AccountName from T_unit_account你游标里就2个返回字段,你定义了3个变量循环?
二月十六 2017-09-18
  • 打赏
  • 举报
回复
SELECT  cpname ,   --这里读取了两条
AccountName
FROM T_unit_account
OPEN table_contact
FETCH NEXT FROM Table_contact INTO @fcmn, @fan, @DBID-- 这里是三个变量
buzhunmeiyouni 2017-09-18
  • 打赏
  • 举报
回复
字段数我数过是一样的

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧