临时表列的长度

创建一个临时表的时候.如果不指定列的长度,则临时表列的长度会根据所参照的表的对应列的大小,如

--创建一个表

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



原文地址:https://www.cnblogs.com/0banana0/p/2406258.html