SQL列截断到新表

时间:2015-02-03 16:17:18

标签: sql sql-server sql-server-2008-r2

有没有简单的方法将数据从一个表复制到另一个表,两个表都具有相同的列名,但第一个表都是varchar(max),第二个表是所有不同的值,即varchar(12), varchar(50)等。我可以简单地允许截断吗?或者我是否必须指定每个尺寸,每个使用左截断?

3 个答案:

答案 0 :(得分:1)

作为said by the documentation,您可以使用SET ANSI_WARNINGS OFF静默截断值:

1> SET ANSI_WARNINGS OFF      
2> go                         
1> create table table1 (col1 varchar(100));
2> go
1> insert into table1 (col1) values ('abcdefghijklmnopqrstuvwxyz');
2> go

(1 rows affected)
1> select * from table1;
2> go
col1
----------------------------------------------------------------------------------------------------
abcdefghijklmnopqrstuvwxyz

(1 rows affected)
1> create table table2 (col1 char(10));
2> go
1> insert into table2 select * from table1;
2> go

(1 rows affected)
1> select * from table2;
2> go
col1
----------
abcdefghij

经过测试:

1> select @@version;
2> go


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
        Oct 19 2012 13:38:57
        Copyright (c) Microsoft Corporation
        Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

但文件说:

  

适用于:SQL Server(SQL Server 2008到当前版本),   Azure SQL数据库。

答案 1 :(得分:0)

只要第一个表中每列中的数据不超过第二个表中指定的列长度,就可以简单地从第一个表插入到第二个表中。如果第二个表中的类型不同,您只需要使用转换。假设MSSQL

答案 2 :(得分:0)

你也可以CAST你希望插入的每一列(在插入的选择部分),这将强制截断,如下所示:

SELECT CAST('12345' AS VARCHAR(3))