Ограничения функций STUFF с Dynami c SQL - PullRequest
0 голосов
/ 09 июля 2020

Я использую динамику c SQL для объединения нескольких скриптов, которые я загрузил в таблицу. Он возьмет эти отдельные сценарии, объединит их в один сценарий, а затем поместит этот готовый сценарий в другую таблицу. До сих пор он работал прекрасно, успешно объединяя около 17 скриптов. Но вчера попробовал 80. И вот в чем проблема. Каждый раз, когда я пробую, он набирает 78 165 символов. Его внутренности go выглядят следующим образом:

 SET @FinScriptSQL
        = N'SELECT script, row_number( ) over( order by scriptTypeId ) as execOrder INTO #' + @FinScriptName
          + N' from dbo.' + @FinScriptName
          + N';
          DECLARE @tsqlStmt NVARCHAR(MAX);
               SELECT @tsqlStmt = STUFF(
               (
                   SELECT (CHAR(13) + CHAR(10) + script) AS [text()]
                   FROM #'          + @FinScriptName
                             + N'
                   ORDER BY execOrder
                   FOR XML PATH(''''), TYPE).value(''.'', ''nvarchar( max )''),
                   1   ,
                   1   ,
                   NULL
               );
               
               CREATE TABLE dbo.' + @FinScriptName + N'_FinishedScripts 
                      (
                        Name sysname NULL, 
                        FinishedScript NVARCHAR(MAX) NULL
                      );
               INSERT INTO dbo.' + @FinScriptName + N'_FinishedScripts
                     SELECT ''' + @FinScriptName + N''', @tsqlStmt;'
    PRINT @FinScriptSQL;
    EXECUTE sp_executesql @FinScriptSQL;

Столбец таблицы, в котором находятся отдельные скрипты, является NVARCHAR (MAX), как и столбец назначения новой таблицы. Я подумал, что это может быть настройка на сервере SQL, поэтому я уже убедился, что максимальное количество извлекаемых символов широко открыто. Есть идеи?

...