2014-09-25 2 views
0

Я запускаю SQL Server 2008 R2, и я получаю следующую ошибку при запуске хранимой процедуры sp_smc_add_personuser.Получение ошибки при запуске этой хранимой процедуры

Msg 213, Level 16, State 1, Line 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 

EDIT - Я ищу некоторую помощь чеканки проблемы, потому что я не совсем уверен, как идти об устранении этого. Если все, что вы можете сделать, это дать мне некоторые общие стратегии устранения неполадок (учитывая, что я не могу использовать встроенный отладчик из-за проблем с разрешениями), тогда это было бы очень полезно.

+0

Вы уверены, что вам нужен курсор? Эта процедура RBAR не представляется необходимой! – Matthew

+0

Боковое примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (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_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –

ответ

1

Ваша ошибка, кажется, здесь:

insert into personuser 
     values 
     (@personid 
     ,@samid 
     ,@rdate 
     ,@cdate 
     ) 

Вы должны явно перечислить, который четыре колонки в personuser вы хотите заполнить с прилагаемыми значениями

http://www.w3schools.com/sql/sql_insert.asp

Ваш синтаксис действителен только если personuser - это ровно четыре столбца.

+0

Спасибо за подсказку! Это дало мне остальную часть пути к разрешению – Jonathan

Смежные вопросы