Я столкнулся с проблемой при вызове sp_executesql
и передал параметр varchar.
Я получил эту ошибку:Вызов sp_executesql с параметром varchar
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Я столкнулся с проблемой при вызове sp_executesql
и передал параметр varchar.
Я получил эту ошибку:Вызов sp_executesql с параметром varchar
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Это означает, что параметр sp_executesql
@statement
ожидает nvarchar
.
Это не означает, что ваш параметр должен быть NVARCHAR.
Конечно, если у вас нет параметров, почему вы используете sp_executesql?
CREATE TABLE #foo (bar varchar(100) NOT NULL);
DECLARE @filter varchar(100) = 'bob';
EXEC sys.sp_executesql
N'SELECT * FROM #foo WHERE bar = @p1', --NVARCHAR because of N prefix
N'@p1 varchar(100)', --NVARCHAR because of N prefix
@filter --VARCHAR
DROP TABLE #foo
Я создаю динамический запрос, где поля меняются. –
Попробуйте это:
например Это даст ошибку, потому что @SQL должна быть NVARCHAR
Ниже дают ошибку:
DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
Итак: Использование NVARCHAR(100)
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
Когда я использовал Nvarchar, @SQL был обрезан и не был завершен, я должен использовать Varchar вместо. –
Он усекается из-за этого: http://stackoverflow.com/questions/1371383/for-nvarcharmax-i-am-only-getting-4000-characters-in-tsql/1371584#1371584 – gbn
Я читал его, но я не понял, как решить мою проблему. –
Psychic отладчик говорит, что вы либо переходят к SP_ExecuteSQL
переменной type varchar (make nvarchar), или у вас есть строка, которую вы не использовали префикс unicode:
Например
Exec sp_executesql 'select * from something'
Чтобы исправить это использовать:
Exec sp_executesql N'select * from something'
Обратите внимание на N
префикс на строку.
Я строю параметр @SQL как varchar, а затем передаю его sp_executesql. –
Затем я рассказал вам, как это исправить - объявите его как параметр «nvarchar» соответствующей длины (если требуется больше 4000 символов, используйте 'nvarchar (max)'). – Bridge
Я сделал это и то же самое, @SQL обрезал и не может содержать весь динамический запрос, который я построил. –
Вы можете разместить свой sp? –