声明可变字符长度

问题描述

我的表格如下所示:

姓名 深度 IsFile
GMES9604U 1.10 770 CFM-2135.csv 1 1

当我声明我的变量时,只存储了名称的一部分:

declare @filename222 varchar(max)

SET @filename222 = CAST((
    SELECT Top 1 Name
    FROM #MyFiles  
) AS Varchar)

print(@filename222)

Result Messages:
GMES9604U 1.10 770 CFM-2135.cs

我想知道如何将整个 Name 作为我的变量。谢谢!

解决方法

你为什么要对 varchar 进行大小写?在 SQL Server 中,永远不要使用没有长度的字符串声明。但是显式转换是不必要的。

只需使用:

SELECT Top 1 @filename222 = Name
FROM #MyFiles  ;

varchar 的默认长度——在没有长度的情况下使用时——取决于上下文。您可以使用显式 cast(),但您会使用 varchar(max)

,

您表中的名称列定义为什么?它也是<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="inserts"> </div>还是定义为VARCHAR(MAX)

如果您已经在表中拥有该值,则应将该变量声明为相同的数据类型,这样您就永远不会遇到截断问题。

您的问题很可能源于这样一个事实,即未为 VARCHAR(<some number>) 声明添加值时的默认值为 1 或 30(请参阅 https://sqlblog.org/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length