【问题标题】:SQL Server Stored Procedure INSERT NVARCHAR(MAX) not savingSQL Server 存储过程 INSERT NVARCHAR(MAX) 不保存
【发布时间】:2018-05-04 03:38:57
【问题描述】:

我有一个相当简单的 SQL Server 存储过程,它有 2 个输入参数,名称是 nvarchar(100),结果是 nvarchar(max)

存储过程只是进行插入 - 仅此而已。

INSERT INTO TableX (name, results) 
VALUES (@Name, @Results)

结果是一个以| 分隔的文件,序列化为字符串。有时运行此存储过程时,表中的行只有名称,结果为空白。没有 SQL 错误。这不仅仅是因为结果的长度,因为一些有效的调用比一些最终为空的调用更长。我确实发现一些条目包含单引号,所以我去掉了单引号,但这并没有帮助。

有什么想法吗?

这是存储过程:

CREATE PROCEDURE [dbo].[tempdata_SaveMarketStatsToCache]
    (@ScreenName NVARCHAR(100),
     @Results NVARCHAR(MAX))
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO TempData_MarketStatsCache (MarketStatsKey, Results)
    VALUES (@ScreenName, @Results)
END

从 .NET 调用存储过程。长度为 -1 的 SQLDbType.NVarchar

更新:我怀疑它是被传递的字符串的大小。失败的最小字符串不到 250K 个字符。这对于 NVARCHAR(max) 来说是可以的,但在 INSERT 期间似乎发生了一些事情。

更新 2:原来这是 SQL Server Management Studio 的问题。我右键单击表格并选择编辑 200 行。对于具有大结果(超过 200K 个字符)的行,该列显示为空。如果我只是简单地运行一个查询,就会显示列值。

【问题讨论】:

  • 你是如何调用你的存储过程的?整个过程是什么样的? “空白”行的LEN(results) 是什么?
  • 您能否使用特定的输入值始终如一地重现此内容?
  • 空白或空?如果它看起来是空白的,也许有前导空格。你能发布确切的过程和你使用的产生空白的参数吗?
  • 如果它看起来是空白的,可能有一个前导 CR 或 LF
  • 您是否尝试过运行 sql server profiler 并查看从程序传递到存储过程的内容?

标签: sql stored-procedures sql-server-2008-r2


【解决方案1】:

原来这是一个 SQL Server Management Studio 问题,看起来好像没有插入数据。请参阅问题中的更新 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多