我有一个专栏 (
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 中都会发生这种情况。
首先 - 我没有看到您报告的这种行为。您认为您的专栏如何以及为何被截断为 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'')
正如我所说 - 在我的测试中,我不需要这样做 - 但也许它适用于你的情况?
转到菜单 - 查询 --> 查询选项 --> 结果 --> 文本
有一个选项
Maximun number of characters displayed in each column
,我的默认是256
。
一旦我将其设置为
1000
,问题就解决了。
你在SSMS中测试吗?如果是这样,请检查选项
Query Results > SQL Server > Results to Grid
- Maximum characters retrieved > Non XML data
。有 250 或类似值吗?
您看到这一点是因为 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() 代替,可以避免这种风险。