#sql-server #tsql
#sql-server #tsql
Вопрос:
тело моего 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
Комментарии:
1. Какое сообщение об ошибке вы получаете?
2. У меня этот код отлично работает в SQL 2008 (хотя это странный способ выполнения операции pivot, учитывая, что в TSQL есть
PIVOT
оператор)
Ответ №1:
вы не можете присвоить значения по умолчанию локальным переменным… поэтому просто удалите «= 0» из этой строки :
declare @i smallint, @j smallint = 0 ; with ct....
итак, он гласит…
declare @i smallint, @j smallint; with ct....
HTH.
Дэйв
PS … не забудьте удалить свою временную таблицу, когда закончите с ней…
Комментарии:
1. Синтаксический ярлык, присваивающий значения при объявлении переменных, допустим для T-SQL в SQL 2008 и более поздних версиях
Ответ №2:
Изменить
declare @i smallint, @j smallint = 0
Для
DECLARE @i SMALLINT, @j SMALLINT
SET @j = 0