【发布时间】: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