Как можно выполнить итерации по результатам хранимой процедуры из другой хранимой процедуры … без курсоров?

Чтобы упаковать свои классы с зависимостями в исполняемый jar-файл, вы должны использовать maven-shade-plugin :

  
    org.apache.maven.plugins
    maven-shade-plugin
    3.2.1
    
      
        package
        
          shade
        
        
          
            
              com.salsify.lineserver.server.Main
            
          
        
      
    
  

Вы можете удалить конфигурацию maven-jar-plugin из pom.

7
задан Joel Coehoorn 1 October 2008 в 20:39
поделиться

7 ответов

Это не может быть самым эффективным, но я составил бы временную таблицу, чтобы содержать результаты сохраненного proc и затем использовать это в соединении против целевой таблицы. Например:

CREATE TABLE #t (uniqueid int)
INSERT INTO #t EXEC p_YourStoredProc

UPDATE TargetTable 
SET a.FlagColumn = 1
FROM TargetTable a JOIN #t b 
    ON a.uniqueid = b.uniqueid

DROP TABLE #t
15
ответ дан 6 December 2019 в 14:11
поделиться

Вставьте результаты сохраненного proc во временную таблицу и соедините это с таблицей, которую Вы хотите обновить:

INSERT INTO #WorkTable
EXEC usp_WorkResults

UPDATE DataTable
  SET Flag = Whatever
FROM DataTable
INNER JOIN #WorkTable
  ON DataTable.Ket = #WorkTable.Key
0
ответ дан 6 December 2019 в 14:11
поделиться

Используйте временные таблицы или табличную переменную (Вы используете SS2005).

Хотя, это не способно вложенным множеством - если сохраненный proc использует тот метод затем, Вы не можете dumpt, которые производят во временную таблицу.

0
ответ дан 6 December 2019 в 14:11
поделиться

Ужасное решение состояло бы в том, чтобы иметь Ваш возврат процедуры "следующий" идентификатор каждый раз, когда это называют при помощи другой таблицы (или некоторый флаг на существующей таблице) для отфильтровывания строк, которые это уже возвратило

-1
ответ дан 6 December 2019 в 14:11
поделиться

При обновлении до SQL 2008 затем, можно передать параметры таблицы, которым я верю. Иначе Вы застреваете с глобальной временной таблицей или составлением постоянной таблицы, которая включает столбец для своего рода идентификатора процесса для идентификации, какой вызов к хранимой процедуре является соответствующим.

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

0
ответ дан 6 December 2019 в 14:11
поделиться

Вы могли также изменить свой сохраненный proc на пользовательскую функцию, которая возвращает таблицу с Вашим uniqueidentifiers. Вы можете joing непосредственно к UDF и рассматривать его как таблица, которая избегает необходимости составлять дополнительную временную таблицу явно. Кроме того, можно передать параметры в функцию, как Вы называете ее, делая это очень гибким решением.

CREATE FUNCTION dbo.udfGetUniqueIDs
()
RETURNS TABLE 
AS
RETURN 
(
    SELECT uniqueid FROM dbo.SomeWhere
)

GO

UPDATE dbo.TargetTable 
SET a.FlagColumn = 1
FROM dbo.TargetTable a INNER JOIN dbo.udfGetUniqueIDs() b 
    ON a.uniqueid = b.uniqueid

Править: Это будет работать над SQL Server 2000 и...

2
ответ дан 6 December 2019 в 14:11
поделиться

Можно использовать временную таблицу или табличную переменную с дополнительным столбцом:

DECLARE @MyTable TABLE (
    Column1 uniqueidentifer,
    ...,
    Checked bit
)

INSERT INTO @MyTable
SELECT [...], 0 FROM MyTable WHERE [...]

DECLARE @Continue bit
SET @Continue = 1
WHILE (@Continue)
BEGIN
    SELECT @var1 = Column1,
           @var2 = Column2,
           ...
    FROM @MyTable
    WHERE Checked = 1

    IF @var1 IS NULL
        SET @Continue = 0
    ELSE
    BEGIN

        ...

        UPDATE @MyTable SET Checked = 1 WHERE Column1 = @var1
    END
END

Править: На самом деле в Вашей ситуации соединение будет лучше; код выше является повторением без курсора, которое является излишеством для Вашей ситуации.

-1
ответ дан 6 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: