【问题标题】:How to set morethan max size charecters in NVARCHAR(MAX),sql Server2005如何在 NVARCHAR(MAX)、sql Server 2005 中设置超过最大大小的字符
【发布时间】:2010-11-18 13:56:07
【问题描述】:

我正在使用

声明@insertsql nvarchar(MAX)

--above @insertsql for sp_executesql 只接受 nvarchar 作为输入

set @insertsql='--我在这里给出超过 10000 个字符 -----'

EXEC sp_executesql @insertsql, N'@inXMLRequest XML OUTPUT', @inXMLRequest OUTPUT

如何在sql server2005的NVARCHAR(MAX)中插入10000多个字符

谁能帮忙

提前致谢

【问题讨论】:

  • 我这里没有任何问题。 @insertsql 在做什么?或者你是从不同的部分构建@insertsql?
  • 详细说明 Ruben 的评论,如果您在图片中的某处有类似 REPLACE(@someNonMaxValue,'blah','blahblah') 的内容,您可能会看到这样的问题,因为 REPLACE on NVARCHAR(not MAX ) 返回 NVARCHAR(不是 MAX)。您可以通过编写 REPLACE(CAST(@someNonMaxValue AS NVARCHAR(MAX)),'blah','blahblah') 来解决这个问题

标签: sql sql-server-2005 tsql


【解决方案1】:

这发生在我使用内联 SQL 语句而不是存储过程时。

如果您达到了这个上限,您可能需要考虑迁移到存储过程。

【讨论】:

  • 嗨 Raj,谢谢你的帮助,我也在使用内联 sql,之后我得到了超出范围的 NVARCHAR 字符串,你可以帮助解决这个问题。
【解决方案2】:

谢谢大家,

我得到了答案

直接使用 SP_Executesql 我们执行 nvarchar 变量

上面我们正在准备@insertsql nvarchar 变量超过 8000 个字符,它像这样给 sp_executesql

EXEC sp_executesql @insertsql, N'@inXMLRequest XML OUTPUT',@inXMLRequest OUTPUT

上面的查询替换为下面的查询

Exec('DeClare @inXMLRequest XML SET @inXMLRequest='------超过 8000 个字符---')

最后我们将执行那个 nvarchar 字符串并输出

【讨论】:

    【解决方案3】:

    用于在 sp_executesql(在您的情况下为 @insertsql)中运行的命令的参数是 NVARCHAR(4000) 而不是 NVARCHAR(MAX),因此您只能使用 4000 个字符的动态 SQL 命令。

    如果变量中的空间不足,则需要进行一些代码重构。

    【讨论】:

    • 嗨,我只使用了声明为 Nvarchar(max) 的 @insertsql。如何在 nvarchar(max) 中使用超过 8000 个字符。你能给出任何解决方案吗?
    • 你不能。 sp_executesql 过程根据其输入参数定义仅接受 4000 个字符。
    【解决方案4】:

    sp_executesql 将接受可以长于 4000 的 NVARCHAR(MAX),只是不能一次全部分配。它需要在单个赋值语句中分配 4000 个字符,然后附加如下所示:

    declare @strSQL nvarchar(max)
    --@strSQL + REPLICATE(' ', 5000)+' ''ERROR!'''
    --exec sp_executesql @strSQL 
    SET @strSQL = N'SELECT'+ REPLICATE(' ', 3000)
    SET @strSQL = @strSQL + REPLICATE(' ', 3000)+' ''This works'''
    exec sp_executesql @strSQL
    select LEN (@strSQL)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多