我运行SQL Server 2008 R2和我收到以下错误,当我运行存储过程sp_smc_add_personuser
得到一个错误。运行时,这个存储过程
消息213,级别16,状态1,行45
列名或提供值的数目不匹配表定义。
下面是我试图运行代码。
ALTER PROCEDURE [dbo].[sp_smc_add_personuser]
as
--source variables
declare @personid int
declare @samid nvarchar(256)
declare @rdate datetime
declare @cdate datetime
DECLARE @YEAR VARCHAR(6)
DECLARE @TERM VARCHAR(6)
--SELECT @YEAR=ACADEMIC_YEAR,
-- @TERM=ACADEMIC_TERM
--FROM SMCHELPER..CURRENTTERM
--WHERE OFFICE='ADMISSION'
declare cur_PersonAD cursor for
select distinct p.personid,ad.samid as UserName,getdate() as CreateDate, getdate() as RevisionDate from people p
inner join smchelper.dbo.activedirectory ad on p.people_code_id=ad.empid
inner join academic a on p.people_code_id=a.people_code_id
where ad.samid in (select samid from smchelper..activedirectory)
and (a.academic_flag='Y' or a.application_flag='Y')
and a.academic_year >= '2012'
and p.personid not in (select personid from campus6.dbo.personuser)
open cur_PersonAD
fetch next from cur_PersonAD into @personid,@samid,@rdate,@cdate
while (@@fetch_status<>-1)
begin
if (@@fetch_status<>-2)
begin
--print @personid
--print @samid
if not exists (select personid from personuser pu
where [email protected] and
[email protected])
begin
insert into personuser
values
(@personid
,@samid
,@rdate
,@cdate
)
end
end
fetch next from cur_PersonAD into @personid,@samid,@rdate,@cdate
end
close cur_PersonAD
Deallocate cur_PersonAD
编辑 - 我正在寻找一些帮助追逐问题,因为我不太清楚如何去解决这个问题。如果所有你能做的就是给我提供一些故障诊断的一般策略(因为我不能使用内置的调试程序,由于权限问题),那么这将是非常有帮助的。
你确定你需要使用游标?这个程序RBAR并不需要! – Matthew 2014-09-25 23:16:37
旁注:你应该** **不使用'sp_'前缀为您的存储过程。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! – 2014-09-26 05:06:12