2015-04-21 4 views
0

Это может быть глупый вопрос, но я новичок в динамическом sql и его ограничениях (do's and dont's, которые я читаю благословения и проклятия Dynamic SQL).Динамический TSQL - цепочка больших запросов Together

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

Эта одна часть моего скрипта имеет длину более 500 строк, 1/4 из них - столбцы и переименование этих столбцов для некоторых; другой частью этой длины являются многие другие левые внешние соединения подзапросов.

Я знаю, что могу установить переменную на nvarchar (max), но лучше ли пытаться вставить столько текста или лучше разделить ее между большими переменными размерами и объединить их вместе и попытаться выполнить ввод запрос concat'd?

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

Для повторного использования памяти лучше всего установить эту переменную в нуль после завершения ее работы?

Спасибо за любые мысли и извинения по длине вопроса.

+1

Ну, если вы так заинтересованы в сохранении памяти, не используйте NVARCHAR, если вам не нужно. Плюс VARCHAR может содержать 8000 символов (вдвое больше, чем у NVARCHAR). На самом деле, каждый максимальный размер переменных составляет всего 8 КБ, что очень мало в настоящее время, поэтому я не думаю, что вам следует беспокоиться об использовании памяти для хранения скрипта. – Stephan

+1

@Stephan благодарит за данную информацию. Сначала я использовал nvarchar, чтобы получить результат из более раннего гораздо меньшего запроса, который используется для ввода в другой. Благодарю. – natur3

ответ

1

Вы можете использовать sp_executesql и вы можете передать в SQL строку до 2 Гб, если его объявлен как NVARCHAR (макс):

(от MSDN https://msdn.microsoft.com/en-us/library/ms188001.aspx)

Если константа Unicode указан , он должен иметь префикс с N. Например, константа Unicode N'sp_who 'действительна, но символьная константа' sp_who 'не является. Размер строки ограничен только доступной памятью сервера базы данных. На 64-битных серверах размер строки ограничен 2 ГБ, максимальный размер nvarchar (max).

+0

спасибо. Сейчас это работает, другой проблемой, с которой я столкнулся, было ограничение размера и длины выходного окна. Его просто много текста для вывода. – natur3