对select into表复制的一点思考
操作系统:Windows 2007
数据库版本:SQL Server 2008 R2
今天写存储过程遇到一个问题,用"Select 1 id,'Boss_he' into A"这样的SQL语句创建A表时,它的字段类型及字段长度是由select出来的字段决定的。
当我们往A表插入一些字段较长的数据时,数据库就会提示”类型转换异常“等一些错误信息。
"Select * into A From B"是我们经常用到的一种表复制语句,它实现的功能是创建A表,A表表结构和B表的表结构完全相同,并把B表的数据填充到A表。
如果是这样的一条SQL,"SELECT 'Boss_he' name,0 comm,1000.00 sal INTO A",它创建A表的脚本如下:
CREATE TABLE [dbo].[A]( [name] [VARCHAR](7) NOT NULL, [comm] [INT] NOT NULL, [sal] [NUMERIC](6, 2) NOT NULL ) ON [PRIMARY]
可以看得出来,A表的字段类型及长度是根据Select 出来的字段决定的。假如,我希望A表的字段name的类型为VARCHAR,长度为20,字段comm的定义
指定是NUMERIC(10,2),sal字段对应的是NUMERIC(20,7)。下面是实现代码的脚本:
SELECT CONVERT(VARCHAR(20), 'Boss_he') name , CONVERT(NUMERIC(10, 2), 0) comm , CONVERT(NUMERIC(20, 7), 1000) sal INTO A
当然,也可以先创建A表,再用"insert into A select * from B"语句来复制B表的数据到A表。