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