Выполнять очень длинные инструкции в TSQL с помощью sp_executesql

Я хотел бы выполнить динамические инструкции SQL, которые составляют около 10 000 символов.

Когда я использую sp_executesql, как показано ниже:

DECLARE @stmt varchar(MAX) SET @stmt = 'xxxxxxxx.................' which is about 10,000 characters EXEC sp_executesql @stmt 

Я получил следующую ошибку

 The character string that starts with ' select t1.e_reference xxxxxxxxxxx' is too long. Maximum length is 8000. 

Насколько я знаю, мы можем использовать sp_executesql для выполнения очень длинных утверждений, не так ли?

Я использую SQL Server 2008, Enterprise Edition, 64 бит.

Как я могу это достичь? Благодарю.

Исходя из ваших ответов в сообщении, вы используете linked server . Ограничение 8000 char не задано sp_executesql, но OPENQUERY, которое вы, вероятно, используете в переменной @stmt.

MSDN говорит об аргументах OPENQUERY :

' query ' Строка запроса выполняется на связанном сервере. Максимальная длина string – 8 КБ.

http://msdn.microsoft.com/en-us/library/ms188427.aspx

Чтобы обойти это, вы, вероятно, могли бы использовать

 execute (@query) at oracle_linked_server 

MSDN говорит, что это немного неопределенно: «Размер строки ограничен только доступной памятью сервера базы данных. На 64-битных серверах размер строки ограничен 2 ГБ, максимальный размер nvarchar (max). "

На 64-битных серверах ограничение составляет 2 ГБ. Неясно, каков предел 32-разрядных серверов? Это 4000, 8000, какая память доступна, 2 ГБ?

Параметр @stmt для sp_executesql имеет тип данных nvarchar (8000), поэтому вы превысили лимит.

Либо реорганизуйте свои SQL-запросы на более мелкие части, либо поместите SQL в хранимую процедуру.

  • T-SQL EXEC против sp_exec
  • sp_executesql не показывает желаемого результата
  • SQL-запрос как параметр
  • Комплекс sp_executesql - уязвим для инъекций?
  • Interesting Posts

    Условный столбец, выбирающий хранимую процедуру sql-сервера

    INSERT INTO SELECT с несколькими CASE КОГДА

    Поиск и условный запуск в SELECT Query

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

    Оказывается ли индекс покрытия, когда данные соответствуют порядковому индексу?

    C # и SQL Server: любая причина поместить один INSERT в транзакцию?

    Группа T-SQL пропускает и принимает

    SQL Решите функцию с помощью цикла While

    Несколько COUNT SELECTS из нескольких таблиц в одном запросе

    Краткий / элегантный метод дублирования схемы таблицы?

    SQL Лучший способ подключиться к день за днем ​​данных в одну строку, включая новые и удаленные идентификаторы

    Несколько таблиц объединяются для повышения производительности?

    Msg 8966, уровень 16, состояние 1, строка 1 Не удалось прочитать и зафиксировать страницу (1: 1681) с типом защелки SH. sysindexes не удалось

    unsigned right shift '>>>' Оператор в sql-сервере

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

    Давайте будем гением компьютера.