Проверка на наличие данных из списка параметров - PullRequest
1 голос
/ 25 января 2020

В настоящее время я работаю над проектом, который поставил меня в тупик, так как я мало занимался дизайном хранимых процедур. У меня есть задача, когда при входе пользователя они могут быть связаны с одной или несколькими группами. Я передаю список групп в качестве параметра при вызове сохраненного pro c как @GroupList = "Group1", "Group2", "Group3". Может быть любое количество групп. Вызов для добавления нового пользователя должен завершиться неудачей, если одна из групп не существует. Я пытаюсь использовать следующий код, чтобы проверить, существует ли он, прежде чем заполнять временную таблицу идентификаторами существующих групп. Моя проблема в том, что он продолжает терпеть неудачу. Я перепробовал все, что только мог придумать, поэтому обращаюсь к людям более опытным, чем я. Заранее спасибо. Это утверждение if Существует, что мне не удается.

Declare @GroupList varchar(100), @return int, @sql varchar(1000)
if @GroupList is not null
begin
if (object_id ('tempdb..#TempGroupList') is not null) drop table #TempGroupList
Create Table #TempGroupList
(
GroupID int,
PlayerID int
)
if exists (select * from Group_new where GroupName in (' + @GroupList + '))
    begin
    --lets populate our temp table
        set @SQL = 'insert into #TempGroupList (GroupID) select GroupID from Group_New where GroupName in (' + @GroupList + ')'
        exec(@sql)
    end
else
set @return = 1
select @return
print 'Stop, one of the Group names you entered does not exist'
Return
end

1 Ответ

0 голосов
/ 25 января 2020

Я бы разбил входные данные, сделал бы проверку и вставил бы:

create procedure . . . (
    Declare @GroupList varchar(100),
    @return int, @sql varchar(1000)
) as
begin
    declare table @groups (grp varchar(255));

    insert @groups (grp)
        select ltrim(rtrim(value))
        from string_split(@grouplist, ',');

    if not exists (select 1
                   from @groups g
                   where not exists (select 1 group_new gn where gn.groupname = g.groupname)
                  )
    begin
        . . .  whatever you want to do here
    end;
    else begin
        print 'Stop, one of the Group names you entered does not 
    end;
end;

Заполнение временной таблицы, определенной в хранимой процедуре, мало что дает, поскольку временная таблица удаляется, когда хранимая процедура возвращает. Но вы можете поместить любой лог c, который хотите, в часть then после if.

...