查看列长度(Postcode)已增加到varchar(8000)!,从基础表创建时,它的列长度仅为varchar(8)
数据库是SQL Server 2012。
create view v_testing as
select Postcode = CASE WHEN LEN(A.RealPostcode) = 0 THEN NULL
ELSE REPLACE(A.RealPostcode,' ','')
END,
A.RealPostcode
from dbo.Table A;
答案 0 :(得分:2)
https://msdn.microsoft.com/en-us/library/ms186862.aspx
如果string_expression的类型不是varchar(max)或 nvarchar(max),REPLACE截断返回值为8,000字节。至 返回值大于8,000字节,string_expression必须是 明确地转换为大值数据类型。
所以只需使用cast
函数:
create view v_testing as
select Postcode = CASE WHEN LEN(A.RealPostcode) = 0 THEN NULL
ELSE CAST(REPLACE(A.RealPostcode,' ','') AS VARCHAR(8))
END,
A.RealPostcode
from dbo.Table A;