SQL Server: итеративный вызов процедуры - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть хранимая процедура, которая что-то оценивает.Я хотел бы вызывать эту процедуру много раз с разными аргументами и вставлять все в одну таблицу.Вызов этой процедуры - это то, что я хотел бы автоматизировать.

Скажем, у меня есть две таблицы, у одной есть несколько имен, у второй таблицы есть фамилии.Я хотел бы соединить эти две таблицы, чтобы получить все возможные комбинации имен и фамилий.И затем я хотел бы вызвать свою процедуру для каждой строки объединенной таблицы.

CREATE TABLE #FN 
(
    FirstName varchar(255),
);

CREATE TABLE #LN 
(
    LastName varchar(255),
);

INSERT INTO #FN VALUES ('Augustinus'), ('Blepharo'), ('Gripus')

INSERT INTO #LN VALUES ('Sylla'), ('Petreius'), ('Cerinthus')

SELECT * 
INTO #NAMES 
FROM #FN 
CROSS JOIN #LN

И теперь мне нужно автоматизировать следующий код, перейдя строку за строкой из #NAMES, вместо того, чтобы вводить вручнуюаргументы.

CREATE TABLE #RESULT (Val VARCHAR(10))

INSERT INTO #RESULT
    EXEC('EXEC #myprocedure @arg1=''Augustinus'', @arg2=''Sylla'';
          EXEC #myprocedure @arg1=''Augustinus'', @arg2=''Petreius'';
          ...')

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете использовать select query для создания вашей dynamic execute stored procedure записи по записи.

Пожалуйста, проверьте код ниже для ответа.

CREATE TABLE #FN (
    FirstName varchar(255),
);
CREATE TABLE #LN (
    LastName varchar(255),
);
INSERT INTO #FN VALUES ('Augustinus'),('Blepharo'),('Gripus')
INSERT INTO #LN VALUES ('Sylla'),('Petreius'),('Cerinthus')

SELECT * INTO #NAMES FROM #FN CROSS JOIN #LN

SELECT * FROM #NAMES

CREATE TABLE #RESULT (Val VARCHAR(1000))

INSERT INTO #RESULT(Val)
SELECT
    'EXEC #myprocedure @arg1=''' + N.FirstName + ''', @arg2=''' + N.LastName + ''';' AS [Value]
FROM #NAMES N;

SELECT Val FROM #RESULT;

DROP TABLE #FN;
DROP TABLE #LN;
DROP TABLE #NAMES;
DROP TABLE #RESULT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...