Не удалось перехватить ошибку в хранимой процедуре на сервере SQL - PullRequest
0 голосов
/ 08 июня 2011

тело моего SP, как следует ... когда я пытаюсь запустить его, я получаю ошибку. я просто не понимаю, почему выдается ошибка ... где настоящая ошибка. пожалуйста, помогите мне.

Create table #jobs (id int identity(1,1),Specialist varchar(50),JID int)  
insert into #jobs values('ANA', 1) 
insert into #jobs values('ANA', 5) 
insert into #jobs values('ANA', 9) 
insert into #jobs values('ANA', 7) 
insert into #jobs values('ANA', 6)   

insert into #jobs values('GEN', 2) 
insert into #jobs values('GEN', 3) 
insert into #jobs values('GEN', 11) 
insert into #jobs values('GEN', 13) 
insert into #jobs values('GEN', 45)  
insert into #jobs values('GEN', 23) 
insert into #jobs values('GEN', 28)    
insert into #jobs values('GEN', 41) 
insert into #jobs values('GEN', 49) 
insert into #jobs values('GEN', 52) 

insert into #jobs values('robin', 12) 
insert into #jobs values('robin', 15) 
insert into #jobs values('robin', 17) 

declare @i smallint, @j smallint = 0
; with cte as (select COUNT(*) cnt FROM #jobs group by Specialist) select @i=MAX(cnt) from cte

declare @sql nvarchar(max)
set @sql = N'
;with cte as (
        select distinct Specialist from #jobs
)
select
        Specialist '

while @i > @j
begin
        set @j = @j + 1;
        set @sql = @sql + N'
        ,(
                select id from (
                        select 
                                rn = row_number() over (partition by Specialist order by id),
                                id
                        from #jobs
                        where Specialist = cte.Specialist
                ) t
                where rn = ' + cast(@j as varchar(3)) + '
        ) as id
        '
end

set @sql = @sql + N' from cte '
print @sql
exec sp_executesql @sql

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Вы не можете присвоить значения по умолчанию локальным переменным ... поэтому просто удалите "= 0" из этой строки:

declare @i smallint, @j smallint = 0 ; with ct....

, чтобы она читалась ...

declare @i smallint, @j smallint; with ct....

НТН.Дэйв

PS ... не забудьте бросить свой временный стол, когда закончите с ним ...

1 голос
/ 08 июня 2011

Изменить

declare @i smallint, @j smallint = 0

на

DECLARE @i SMALLINT, @j SMALLINT
SET @j = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...