以下SQL存在任何问题吗?转换为varchar时,没有使用长度。
SELECT CAST('abc' AS varchar)
我应该使用
SELECT CAST('abc' AS varchar(3))
答案 0 :(得分:4)
如果您未指定varchar(n)
,那么n
将被假定为30.例如:如果我们运行下面的查询,我们会得到30个字符的输出。
CAST('01234567890123456789012345678901234567890123456789012345678901234567890123456789' as varchar)
另外,请查看以下msdn article以获得更清晰的信息。
答案 1 :(得分:0)
只要你的字符串不超过30个字符,你就没事了 SQL Server将尝试强制转换为30个字符的默认长度。
如果您尝试强制转换超过此长度的字符串,则字符串将被截断为30个字符。
示例:
DECLARE @Example VARCHAR(35) = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' -- 35 Characters
SELECT LEN(cast(@Example as varchar)) AS [Result]
Result
30
答案 2 :(得分:0)
如果您将使用强制转换将数据插入到具有固定长度的列中,则第二个语句将通过截断数据来帮助您避免“字符串或二进制数据将被截断”错误