Sql server SQL Server字符串被截断

Sql server SQL Server字符串被截断,sql-server,sql-server-2008,sql-server-2005,Sql Server,Sql Server 2008,Sql Server 2005,我有一列(col1)带有nvarchar(max) 我正在努力 DECLARE @my_string NVARCHAR(max) set @my_string = N'test' UPDATE dbo.tab1 SET col1 = @my_string + ISNULL(col1, N'') 运气不好,我不知道为什么会这样@马克斯 col1中的字符串值在250个字符后被截断。SQL Server 2005和2008都会发生这种情况。首先,我没有看到您报告的这种行为。您如何以及为什么认为您

我有一列(
col1
)带有
nvarchar(max)

我正在努力

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

UPDATE dbo.tab1 
SET col1 = @my_string + ISNULL(col1, N'')
运气不好,我不知道为什么会这样@马克斯


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

首先,我没有看到您报告的这种行为。您如何以及为什么认为您的列被截断为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'')

正如我所说的——在我的测试中,我不需要这样做——但也许它在你的情况下有效

首先,我没有看到你报道的这种行为。您如何以及为什么认为您的列被截断为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'')

正如我所说的——在我的测试中,我不需要这样做——但也许它在你的情况下有效

您是否在SSMS中进行测试?如果是,请将选项
查询结果>SQL Server>结果签入网格
-
检索到的最大字符数>非XML数据
。是否有值250或类似值?

是否在SSMS中进行测试?如果是,请将选项
查询结果>SQL Server>结果签入网格
-
检索到的最大字符数>非XML数据
。是否有值250或类似值?

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

有一个选项
在每列中显示的最大字符数
,我的默认值为
256

将此设置为
1000
后,问题就解决了。

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

有一个选项
在每列中显示的最大字符数
,我的默认值为
256


一旦我将此设置为
1000
问题就解决了。

我没有看到您报告的这种行为。您如何以及为什么认为您的列被截断为250个字符?没有触发器。代码在一个sql过程中。不是为了猜测你,但是,你可以运行上面的代码并复制这个问题。您提到的存储过程中没有其他东西会截断您的值?不是埋在地下的演员还是什么?谢谢Jocob。这太大了。有些地方字符串被截断为250个字符。我没有看到你报告的这种行为。您如何以及为什么认为您的列被截断为250个字符?没有触发器。代码在一个sql过程中。不是为了猜测你,但是,你可以运行上面的代码并复制这个问题。您提到的存储过程中没有其他东西会截断您的值?不是埋在地下的演员还是什么?谢谢Jocob。这太大了。有些地方字符串被截断为250个字符。我确实从tab1中选择了len(col1),它有250个字符。同样,changedI也从tab1中选择了len(col1),它有250个字符。也没有改变。该值为65530。我从SSMS和java应用程序(jdbc)中只看到250个猜测:表的定义是什么?是否存在某种检查约束?Like CHECK(DATALENGTH([col1])否。该值为65530。我从SSMS和java应用程序(jdbc)中仅看到250个猜测:表的定义是什么?是否存在某种检查约束?Like CHECK(DATALENGTH([col1]))