Могу ли я передать несколько строк из запроса хранимой процедуры в другой запрос? - PullRequest
0 голосов
/ 01 июля 2010

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

В настоящее время у меня есть это:

SELECT @UserId = UserId FROM aspnet_Users WHERE UserName = @username

И я хочу сделать что-то вроде этого:

DELETE FROM some_table WHERE UserId IN ( *the ID list* )
DELETE FROM some_table_2 WHERE UserId IN ( *the ID list* )

Мой первый инстинкт - использовать GROUP_CONCAT, но, очевидно, это функция только для MySQL.Есть несколько способов сделать эквивалентную функциональность, но мне интересно, есть ли лучший способ структурировать запросы?

Ответы [ 4 ]

4 голосов
/ 01 июля 2010
SELECT * FROM dbo.aspnet_UsersInRoles 
WHERE UserId IN ( 
    SELECT UserId FROM aspnet_Users 
    WHERE UserName = @username  
) 
1 голос
/ 01 июля 2010

это должно сделать это.

0 голосов
/ 02 июля 2010

Если вы хотите избежать повторения подзапроса, вы можете поместить его результат во временную таблицу или переменную таблицы. Например:

/*declare and fill a table variable containing all user ids you need to manipulate*/
declare @t table(userid int)
insert into @t(userid) select UserId from aspnet_Users where UserName=@username

/*delete from some table by using the temp variable*/
delete from st 
from some_table st 
    inner join @t t 
        on st.userid = t.userid 
/*repeat this for some other table*/
delete from st 
from some_other_table st 
    inner join @t t 
        on st.userid = t.userid 

Если вы хотите избежать нескольких операторов delete и если присутствие идентификаторов пользователей в some_other_table не имеет смысла, если их нет в some_table, вы можете создать триггер для some_table:

create trigger x on some_table for delete
    as
    begin
     delete from some_other_table 
     where userid in (select userid from deleted)
  end
0 голосов
/ 01 июля 2010
delete from st
    from some_table st
        inner join aspnet_Users au
            on st.UserId = au.UserId
    where /* add additional criteria here to produce "* the ID list *" */
...