2013-02-12 3 views
0

У меня очень длинный встроенный запрос, который даже когда я устанавливаю свойство nvarchar в MAX, текст усекается. Есть ли способ сделать sp_executesql вместо varchar.Сделать sp_executesql принимать varchar вместо nvarchar?

Когда я пытаюсь изменить nvarchar на varchar, я получаю сообщение об ошибке, я тоже попробовал ntext, но те же результаты.

Edit:

на основе того, что я читал по этому вопросу, которые были размещены на ответ, это должно работать, но это dosen't может кто-нибудь сказать мне, почему?

Declare @X varchar(MAX) 
    SET @X = N'Select * From Users' 
    Execute sp_executesql @X 

Хотя это работает без проблем:

Execute sp_executesql N'Select * From Users' 
+0

Такой же пользователь, как этот? http://stackoverflow.com/q/14828534/27535 – gbn

+0

'@ X' должен быть' nvarchar (max) '. Подобно этому 'Declare @X nvarchar (MAX)'. –

+0

идея помещает 'N', прежде чем оператор должен заставить его работать, вот что я понял, если это varchar. – ykh

ответ

1

No. sp_executesql требует NVARCHAR для @stmt и @params параметров

Ваших параметры не должны быть NVARCHAR.

См Call sp_executesql with varchar parameter

Если NVARCHAR (макс) усекается, вы конкатенации неправильно.
См For Nvarchar(Max) I am only getting 4000 characters in TSQL?, почему

Точка sp_executesql, чтобы избежать струнное здания в любом случае: это позволяет параметризовать фиксированные запросы для выполнения плана повторного использования. Почему вы соединяетесь, чтобы построить строку?

+0

Его динамический запрос, который объединяет разные строки вместе, например, где и порядок от ... и т. Д. – ykh

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