【问题标题】:Make sp_executesql take varchar instead of nvarchar?让 sp_executesql 使用 varchar 而不是 nvarchar?
【发布时间】:2013-01-27 12:20:12
【问题描述】:

我有一个很长的内联查询,即使我将 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'

【问题讨论】:

  • 与此用户相同? stackoverflow.com/q/14828534/27535
  • @X 必须是 nvarchar(max)。喜欢这个Declare @X nvarchar(MAX)。
  • 这个想法是把'N'放在语句应该使它工作之前,如果它是varchar,这就是我理解的事件。
  • 不。如果你使用一个变量,它必须是nvarchar。可以使用@X = cast('' as nvarchar(max)) + N'select ' + etc 修复您的连接问题(截断)。对空字符串的第一次强制转换确保连接的字符串是max。
  • 为什么真的是反对票?

标签: sql-server-2008


【解决方案1】:

没有。 sp_executesql @stmt 和 @params 参数需要 nvarchar

您的参数不必是 nvarchar。

见Call sp_executesql with varchar parameter

如果您的 nvarchar(max) 被截断,则您的连接错误。
请参阅For Nvarchar(Max) I am only getting 4000 characters in TSQL? 了解原因

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

【讨论】:

  • 它是一个动态查询,它将不同的字符串连接在一起,例如 where 和 order by...等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2014-01-24
  • 2016-10-18
  • 2015-11-30
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多