Sql server 2008 让sp_executesql接受varchar而不是nvarchar?

Sql server 2008 让sp_executesql接受varchar而不是nvarchar?,sql-server-2008,Sql Server 2008,我有一个很长的内联查询,即使我将nvarchar属性设置为MAX,文本也会被截断。有没有办法让sp_executesql改为使用varchar 当我尝试将nvarchar更改为varchar时,我得到一个错误,我也尝试了ntext,但结果相同 编辑: 根据我在答案上看到的问题,这应该是可行的,但没有人能告诉我为什么 Declare @X varchar(MAX) SET @X = N'Select * From Users' Execute sp_executesql @

我有一个很长的内联查询,即使我将nvarchar属性设置为MAX,文本也会被截断。有没有办法让sp_executesql改为使用varchar

当我尝试将nvarchar更改为varchar时,我得到一个错误,我也尝试了ntext,但结果相同

编辑:

根据我在答案上看到的问题,这应该是可行的,但没有人能告诉我为什么

    Declare @X varchar(MAX)
    SET @X = N'Select * From Users'
    Execute sp_executesql @X
虽然这样做没有问题:

    Execute sp_executesql N'Select * From Users'

否。
sp_executesql
要求@stmt和@params参数使用nvarchar

您的参数不必是nvarchar

如果您的nvarchar(最大值)被截断,则表明连接错误。
看看原因


sp_executesql的要点是避免字符串生成:它允许您参数化固定查询以重复使用执行计划。为什么要连接以生成字符串?

与此相同的用户
@X
必须是
nvarchar(max)
。像这样
Declare@xnvarchar(MAX)
。这个想法是把'N'放在语句之前,使它能够工作,这就是我所理解的事件,如果它是varchar.Nope。如果使用变量,它必须是
nvarchar
。您的连接问题(截断)可以通过使用
@X=cast(''as nvarchar(max))+N'select'+etc
来修复。对空字符串的第一次强制转换确保连接的字符串是
max
。为什么会有否决票?这是一个动态查询,它将不同的字符串连接在一起,例如where和order by…等。