2013-10-02 2 views
4

У меня есть большие запросы , поэтому я не могу использовать связанный сервер в производстве по правилам. Я передаю varchar(max), который имеет более 8000 символов.sp_executesql или exec (@var) слишком длинный. Максимальная длина - 8000

но sp_executesql не поддерживает более 8000 символов, то как я могу выполнить свою строку?

+0

Проверить это http://stackoverflow.com/questions/4833549/nvarcharmax-still-being-truncated – Anjali

+0

проблема не с @var или типа NVARCHAR (максом) проблемы с sp_executesql, который поддерживает только 8000 символов. – angel

+0

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

ответ

2

nvarchar(max) должен работать на SQL Server 2008 или более поздней версии. Если вы используете версию до этого, возможно, потребуется разбить запрос на несколько переменных: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/c26b1e1e-5900-43da-b462-02b1550bcfc3/how-to-use-sql-string-variable-larger-than-4000-character-in-sql-server-2005-stored-procedure

ли эту работу ?:

declare @sql nvarchar(max) set @sql = N'select' + CONVERT(NVARCHAR(MAX),REPLICATE(' ', 8000)) + ' ''Above 8000 character limit test''' exec sp_executesql @sql

+0

проблема не с @var или с типом nvarchar (max) проблема связана с sp_executesql, которая поддерживает только 8000 символов – angel

+0

Хм ... выполняет ли следующий код в вашем SQL? Редактирование: наличие некоторых ошибок при вставке кода здесь. Я сообщу это вам. – Ant

+0

какой код? есть что-то, объявляющее @x nvarchar (max) set @ x = 'select 1 number union all select 2 as number union all select 3 as number' (и т.д. до тех пор, пока это не получит более 8000 символов), эта работа, если длина @ x меньше 8000, но когда это больше 8000, это не работает, и я получил «слишком длинный. Максимальная длина - 8000». – angel

1

Have вы пытаетесь объявить что-то вроде

declare @var_1 nvarchar(4000); 
declare @var_2 nvarchar(4000); 
     . 
     . 
     . 
declare @var_n nvarchar(4000); 

так что вы сделать что-то вроде этого

exec(@var_1 + @var_2 + ....+ @var_n) 

Надеется, что это поможет вам

+0

проблема не с переменной, проблема с Exec, видимо, может получить только 8000 символов, тогда, если мне нужно выполнить большую строку, как я могу ее выполнить? – angel

+0

Это действительно старо, я не знаю, если это все еще актуально, но посмотрите http://sqlmag.com/stored-procedures/character-limitation-spexecutesql –

 Смежные вопросы

  • Нет связанных вопросов^_^