创建一个临时表的时候.如果不指定列的长度,则临时表列的长度会根据所参照的表的对应列的大小,如
--创建一个表
Create table tmp1 (tmp1 varchar(3))
--创建临时表
select tmp1.tmp1 as tmp2 into #tmp2 from tmp1
--第一条语句成功,但是第二条失败,因为超出了长度
insert into #tmp2 values('123')
insert into #tmp2 values('1234')
--而如果没有参照其他数据表,则临时表的列会根据第一条插入的语句的数据长度而自动设置 ,如
select '123' as tmp into #tmp3
insert into #tmp3 values('123')
insert into #tmp3 values('1234')
--第一条语句成功,但是第二条失败,因为超出了长度
因此,使用临时表的时候 ,要注意临时表的列的长度是多大,避免超出
改变临时表的列的长度:
select tmp1 as tmp2 into #tmp2 from tmp1
--修改临时表列的长度
alter table #tmp2 alter column tmp2 nvarchar(max)
还有一种比较取巧:通过加长第一次插入的值的长度
select tmp1 as tmp2,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx' as xx into #tmp2 from tmp1