Имена динамических переменных в SQL - PullRequest
0 голосов
/ 22 октября 2010

У меня (надеюсь) быстрый вопрос по SQL, который сводит меня с ума, и я нигде не смог найти ответ.

У меня есть следующий триггер SQL:

DECLARE @ABCOwnerGroup varchar(30)
DECLARE @DEFOwnerGroup varchar(30)
SET @ABCOwnerGroup='GROUP ONE'
SET @DEFOwnerGroup='GROUP TWO'
etc..

--IF OWNERGROUP IS MISSING (Location NOT NULL)
    UPDATE wo
        SET wo.ownergroup='@'+SUBSTRING(wo.location,1,3)+'OwnerGroup'
    FROM dbo.workorder AS wo INNER JOIN inserted AS i ON wo.wonum=i.wonum
    WHERE wo.status<>'COMP'
        AND wo.historyflag=0
        AND wo.istask=0    
        AND wo.ownergroup IS NULL
        AND wo.location IS NOT NULL

Для вашей информации, коды местоположения похожи на 'ABC-12345', где ABC - это, по сути, сайт, а 12345 - это здание.Таким образом, SUBSTRING (wo.location, 1,3) извлекает часть ABC локации, чтобы она могла заполнить @ ABCOwnerGroup

. Проблема в том, что она вставляет значение '@ABCOwnerGroup' вместо 'GROUPONE '

Любая и вся помощь очень ценится!Надеюсь, это небольшая ошибка!

Ответы [ 3 ]

4 голосов
/ 22 октября 2010

В качестве альтернативы вы можете получить тот же результат без динамического SQL со следующим:

--IF OWNERGROUP IS MISSING (Location NOT NULL)
    UPDATE wo
        SET wo.ownergroup = CASE SUBSTRING(wo.location, 1, 3)
                                WHEN 'ABC' THEN 'GROUP ONE'
                                WHEN 'DEF' THEN 'GROUP TWO'
                            END
    FROM dbo.workorder AS wo
    INNER JOIN inserted AS i ON wo.wonum = i.wonum
    WHERE wo.status <> 'COMP'
        AND wo.historyflag = 0
        AND wo.istask = 0
        AND wo.ownergroup IS NULL
        AND wo.location IS NOT NULL
3 голосов
/ 22 октября 2010

Вам потребуется использовать EXECUTE для выполнения динамического SQL

EXEC('UPDATE wo SET wo.ownergroup=@'+SUBSTRING(wo.location,1,3)+'OwnerGroup FROM dbo.workorder AS wo INNER JOIN inserted AS i ON wo.wonum=i.wonum
WHERE wo.status<>''COMP''
    AND wo.historyflag=0
    AND wo.istask=0    
    AND wo.ownergroup IS NULL
    AND wo.location IS NOT NULL')
2 голосов
/ 22 октября 2010

Вам необходимо выразить все ваше обновление в виде строки и использовать Exec для его выполнения.

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