SQL Server 字符串被截断

问题描述 投票:0回答:4

我有一个专栏 (

col1
),其中有
nvarchar(max)

我正在努力做

DECLARE @my_string NVARCHAR(max)
set @my_string = N'test'

UPDATE dbo.tab1 
SET col1 = @my_string + ISNULL(col1, N'')

不走运,我不知道为什么会发生这种情况。 @马克_s

col1
中的字符串值在 250 个字符后被截断。 SQL Server 2005 和 2008 中都会发生这种情况。

sql-server sql-server-2008 sql-server-2005
4个回答
3
投票

首先 - 我没有看到您报告的这种行为。您认为您的专栏如何以及为何被截断为 250 个字符?您是否使用工具来检查可能截断输出的数据?

您可以检查柱子的长度:

SELECT col1, LEN(col1) FROM dbo.tab1

真的只有250个字符吗???

另外:您正在混合

VARCHAR
(在
@my_string
中)和
NVARCHAR
(
col1
),这可能会导致混乱的结果。避免这种情况!

下一步:如果您想要

NVARCHAR(MAX)
,您需要将其他字符串转换为该格式。

试试这个:

DECLARE @my_string NVARCHAR(200)
set @my_string = N'test'

UPDATE dbo.tab1 
SET col1 = CAST(@my_string AS NVARCHAR(MAX)) + ISNULL(col1, N'')

正如我所说 - 在我的测试中,我不需要这样做 - 但也许它适用于你的情况?


3
投票

转到菜单 - 查询 --> 查询选项 --> 结果 --> 文本

有一个选项

Maximun number of characters displayed in each column
,我的默认是
256

一旦我将其设置为

1000
,问题就解决了。


0
投票

你在SSMS中测试吗?如果是这样,请检查选项

Query Results > SQL Server > Results to Grid
-
Maximum characters retrieved > Non XML data
。有 250 或类似值吗?


0
投票

您看到这一点是因为 col 中数据的最大长度恰好是 250。

ISNULL ( check_expression , replacement_value ) 将 replacement_value 截断为 check_expression 的长度,如下:

https://learn.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql

使用 COALESCE() 代替,可以避免这种风险。

© www.soinside.com 2019 - 2024. All rights reserved.