Использование переменной SQL дважды приводит к ошибке.«Должна быть уникальной партией или хранимой процедурой Witin Query» - PullRequest
0 голосов
/ 02 апреля 2012

Я создаю тикеты, открытые по сравнению с разрешенными за неделю, которые сообщают о количестве дней, предоставленных пользователем.

Моя проблема в том, что powergadgets (используемый мной гаджет) выдает ошибку при попытке запустить приведенный ниже код:

Имя переменной '@NoOfDays' уже объявлено. Имена переменных должны быть уникальными в пакете запроса или хранимой процедуре.

Как видите, мне нужно использовать эту переменную дважды. Если я добавлю Declare @NoOfDays int в начале, powergadgets просто вылетает. Я довольно новичок в SQL, но в прошлом использование дважды передаваемой пользователем переменной никогда не вызывало проблем. Что я могу сделать, чтобы решить проблему?

SELECT        
    a.resolved, b.opened, 
    a.weekClosed AS week, 
    a.yearClosed AS year, 
    CAST(a.yearClosed as varchar(5)) + ', ' + CAST(a.weekClosed as varchar(5)) AS period
FROM            
    (SELECT        
         TOP (100) PERCENT COUNT(DISTINCT TicketNbr) AS resolved,
         { fn WEEK(date_closed) } AS weekClosed,
         { fn YEAR(date_closed) } AS yearClosed
     FROM v_rpt_Service
     WHERE        
         (date_closed >= DateAdd(Day, DateDiff(Day, 0, GetDate()) - @NoOfDays, 0))
     GROUP BY 
         { fn WEEK(date_closed) }, { fn YEAR(date_closed) }
    ) AS  a 
LEFT OUTER JOIN
    (SELECT TOP (100) PERCENT 
         COUNT(DISTINCT TicketNbr) AS opened, 
         { fn WEEK(date_entered) } AS weekEntered,
         { fn YEAR(date_entered) } AS yearEntered
     FROM 
         v_rpt_Service AS v_rpt_Service_1
     WHERE        
         (date_entered > = DateAdd(Day, DateDiff(Day, 0, GetDate()) - @NoOfDays, 0))
     GROUP BY 
         { fn WEEK(date_entered) }, { fn YEAR(date_entered) }
    ) AS b ON a.weekClosed = b.weekEntered AND a.yearClosed = b.yearEntered
ORDER BY 
    year, week

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Покажите весь свой код, и проблема должна стать очевидной.

Проблема не в том, что вы дважды ссылаетесь на переменную, а в том, что вы ОБЪЯВЛЯЕТЕ дважды.В сеансе вы можете иметь только одну переменную с заданным именем, и вы не можете удалить их вручную.

Либо вы запускаете несколько пакетов за сеанс, а переменная переносится между запросами, или выобъявив его дважды в вашем фактическом коде (который не отображается).

2 голосов
/ 02 апреля 2012

Это похоже на ошибку в Powergadgets и способ, которым он оборачивает запросы.мне.Он проверяет запрос, просматривает два запроса, каждый с необходимой переменной, а затем пытается создать их в качестве параметров.Следовательно, вы получаете ошибку объявления дубликата.

Предложение - измените имя переменной во втором запросе, а затем передайте значение дважды (по сути, создав два параметра).Если это работает, то мы знаем, что у Powergadgets есть проблема с переменными, используемыми дважды в немного другой области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...