Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server VARCHAR(最大值)不容纳完整字符串_Sql Server_Tsql_Varcharmax - Fatal编程技术网

Sql server VARCHAR(最大值)不容纳完整字符串

Sql server VARCHAR(最大值)不容纳完整字符串,sql-server,tsql,varcharmax,Sql Server,Tsql,Varcharmax,我定义了一个varcharmax,但它正在截断字符串 我搜索了解决方案,发现所有分配或附加到字符串的新值都应该转换为varcharmax,但仍然没有帮助 这是我的密码: DECLARE @tr VARCHAR(MAX) = '' SELECT @tr = CAST(CAST(@tr AS VARCHAR(MAX)) + CAST(ISNULL(CONCAT ( '<tr>

我定义了一个varcharmax,但它正在截断字符串

我搜索了解决方案,发现所有分配或附加到字符串的新值都应该转换为varcharmax,但仍然没有帮助

这是我的密码:

DECLARE @tr VARCHAR(MAX) = ''

SELECT
    @tr = CAST(CAST(@tr AS VARCHAR(MAX)) + 
               CAST(ISNULL(CONCAT
                (
                    '<tr>',
                    '<td class="dataline">',t.ComponentEquipmentNumber,'</td>',
                    '<td class="dataline">',t.ComponentDescription,'</td>',
                    '<td class="dataline">',t.ReceiverCustodian,'</td>',
                    '<td class="dataline">',t.[Location],'</td>',
                    '<td class="dataline">',t.ParentSystemNumber,'</td>',
                    '<td class="dataline">',t.ParentSystemLocation,'</td>',
                    '<td class="dataline">',t.RootSystemNumber,'</td>',
                    '<td class="dataline">',t.RootSystemLocation,'</td>',
                    '<tr/>'
                ),'') AS VARCHAR(MAX)) AS VARCHAR(MAX))
FROM 
    #TempFinal t 
ORDER BY 
    EquipmentId
你可以看到,我在所有关卡上都对VARCHARMAX施放了石膏,只是为了让它发挥作用,但它仍然不起作用

当我试着打印字符串的长度时len@tr,它返回这个奇怪的数字76788,它甚至不等于VARCHARMAX的8000个字符,没有得到这个数字的逻辑


请帮忙

这个奇怪的数字是最后一个字符串的长度,如果它大于8000,这意味着VARCHARMAX正在执行它的任务,它的最大长度是2^32-1个字符,而不是8000个字符。如何确定字符串被截断?具体打印或在SSMS中显示可能会在实际值正确时将其截断。可能仅在结果窗口中截断打印最多只能打印4000个字符,网格视图中单个单元格中的最大字符数为65535个字符。如果您需要的不止这些,那么您需要以另一种方式导出数据。为什么要将如此大的数据保存在sql中的单个varchar变量中。它不可能保存在任何地方,那么这个表达式在sql中有什么用呢?@pawan:你能在哪里发布进一步的代码吗?你想在哪里使用它,可能还有其他方法,这样你就不需要创建这个字符串了。这个奇怪的数字是最后一个字符串的长度,如果大于8000,则表示VARCHARMAX正在执行其任务,最大长度为2^32-1个字符,而不是8000个字符。如何确定字符串被截断?具体打印或在SSMS中显示可能会在实际值正确时将其截断。可能仅在结果窗口中截断打印最多只能打印4000个字符,网格视图中单个单元格中的最大字符数为65535个字符。如果您需要的不止这些,那么您需要以另一种方式导出数据。为什么要将如此大的数据保存在sql中的单个varchar变量中。它不可能保存在任何地方,那么这个表达式在sql中有什么用处呢?@pawan:你能在哪里发布进一步的代码吗?你想在哪里使用它,可能有其他方法,这样你就不需要创建这个字符串了。