повторение user-sp написано в t-sql - PullRequest
1 голос
/ 08 февраля 2012

У меня есть t-sql, определенный пользователем sp (назовите его sp1), который получает userId в качестве параметра и возвращает

Я хочу создать новый пользовательский sp (назовите его sp2), который получает список идентификаторов пользователей.

sp2 выполняет sp1 для каждого userId и объединяет все выходные данные в один большой вывод.

Каждый набор выходов для userId = a будет последовательно в большой таблице

т.е.. большой стол может выглядеть так:

a  result1,1 
a  result1,2
a  result1,3
b  result2,1
b  result2,1

как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012
SELECT
   * -- change this
FROM
  ListOfIds T
  CROSS APPLY
  dbo.UDFT1 (T.@userid) T1

Это предполагает

  • список идентификаторов уже находится в таблице (ListOfIds здесь)
  • T1 на самом деле является UDF, а не хранимой процедурой
0 голосов
/ 08 февраля 2012

Внутри основного хранимого процесса (sp2) вы можете создать табличную переменную и заполнить ее данными, а затем выбрать все из этой табличной переменной.Примерно так:

DECLARE @loop_tbl TABLE (ID int identity(1,1), UserID int)
DECLARE @return_tbl TABLE (column_a varchar(1), column_result varchar(20), column_int int)
DECLARE @min int, @max int

INSERT INTO @loop_tbl(UserID) SELECT UserID FROM Users
SELECT @min=MIN(ID), @max=MAX(ID) FROM @loop_tbl

WHILE @min <= @max
BEGIN
    INSERT INTO @return_tbl (column_a, column_result, column_int)
    EXEC sp1 @userid=(SELECT UserID FROM @loop_tbl WHERE ID=@min)
    --Proc must return a data set using SELECT with the proper columns in the proper order

    SET @min=@min+1
END

SELECT * FROM @return_tbl 

Единственное, на что нужно обратить внимание, это то, что INSERT EXEC завершится ошибкой, если sp2 вложен в другой сохраненный процесс.

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