Как запустить SQL-запрос длиной более 8000 символов из переменной?

Я могу использовать следующий код для маленьких запросов:

DECLARE @sql VARCHAR(8000)
SET @sql = 'SELECT * FROM myTable'
Exec @sql

Приведенный выше метод очень полезен для поддержания больших объемов кода, особенно когда нам нужно внести изменения один раз и чтобы они отражались везде.

Моя проблема в том, что мой запрос (это всего лишь один единственный запрос), который я хочу передать в переменную @sql, использует более 25 объединений таблиц, некоторые из них на временных табличных переменных, включает сложные операции, и поэтому его длина превышает 8000 символов.

Я хотел использовать тип данных TEXT для хранения этого запроса, но MSDN показывает предупреждение о том, что Microsoft планирует удалить типы данных Text, NText и Image из своих следующих версий. Я хочу, чтобы мой код работал и в будущем.

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

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

20
задан Dale K 22 January 2019 в 02:26
поделиться

1 ответ

Если то, что Вы пытаетесь выполнить, должно сделать это в Studio управления, сценарий ниже мог бы помочь.

DECLARE @Len INT = 5
DECLARE @Str VARCHAR(MAX) = '1111122222333334444455555'
DECLARE @TmpStr VARCHAR(MAX)
DECLARE @Return TABLE (RetStr VARCHAR(MAX))

WHILE(LEN(@Str) > 0)
BEGIN
    SET @TmpStr = LEFT(@Str, @Len)
    IF(LEN(@Str) > @Len)
        SET @Str = RIGHT(@Str, LEN(@Str) - @Len)
    ELSE
        SET @Str = ''
    INSERT INTO @Return SELECT @Str
END

SELECT * FROM @Return

Там @Len должен быть 8000, поскольку это - максимальные шоу Studio управления длиной. @Str текст, который является дольше, чем 8 000 символов.

0
ответ дан 29 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

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