SQL Server 2017 SELECT…INTO 创建的新表指定到文件组

简介: 原文:SQL Server 2017 SELECT…INTO 创建的新表指定到文件组 SELECT…INTO 在 SQL Server 中也是常见的一个功能,过去用此方法创建的新表只能存储到默认的文件组,但是 SQL Server 2017 可以创建到指定的文件组中。
原文: SQL Server 2017 SELECT…INTO 创建的新表指定到文件组

SELECT…INTO 在 SQL Server 中也是常见的一个功能,过去用此方法创建的新表只能存储到默认的文件组,但是 SQL Server 2017 可以创建到指定的文件组中。


使用 SELECT…INTO 需要了解的地方:

SELECT...INTO 为大容量操作,大容量操作是最小日志记录操作;

使用 SELECT... INTO 语句可以是比创建表,然后填充具有 INSERT 语句的表更高效;

启用事务复制时,将完全记录 SELECT INTO 操作,即使处于大容量日志恢复模式下;

不能使用 SELECT…INTO 创建分区表;

SELECT...INTO 不使用源表的分区方案;

源表中定义的索引、约束和触发器不会转移到新表中;

指定 ORDER BY 子句无法确保按指定顺序插入行;

稀疏列属性不会转移到新表中的列;

当选择列表中包含计算列时,新表中的相应列并不是计算列;


在选择现有标识列并将其插入到新表时,新列将继承 IDENTITY 属性;除非以下条件中的一个为真,列将被创建为 NOT NULL 而不继承 IDENTITY 属性:

1. SELECT 语句包含一个联接。

2. 多个 SELECT 语句由 UNION 联接。

3. 标识列在选择列表内多次列出。

4. 标识列是表达式的一部分。

5. 标识列来自远程数据源。



测试 SELECT…INTO 创建的新表指定到文件组:

--创建测试数据
use master
go
create database Demo
go
use Demo
go
create table Test(
id int not null identity(1,1),
userName varchar(50),
addTime datetime constraint df_addtime default(getdate()) 
) on [primary]
go
--插入100行数据
set nocount on
insert into Test(userName) select 'kk'+convert(varchar(10),@@identity) 
go 100
set nocount off
go

--创建文件组及文件
alter database Demo add filegroup fg;
go
alter database Demo
add file
(
	name='fg_data',
	filename = 'D:\SQLServer\Data2017/Demo1.mdf'
)
to filegroup fg;
go

--注意:SELECT…INTO 创建的新表指定到文件组
select * 
into newTest on fg
from Test
go

--查看结果:
SELECT tbl.name AS TableName,fg.name AS [FileGroupName],CAST(p.rows AS float) AS [RowCount]
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS idx 
	ON idx.object_id = tbl.object_id and (idx.index_id < 2  or (tbl.is_memory_optimized = 1 
	and idx.index_id = (select min(index_id) from sys.indexes where object_id = tbl.object_id)))
INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int) AND p.index_id=idx.index_id
LEFT OUTER JOIN sys.destination_data_spaces AS dds ON dds.partition_scheme_id = idx.data_space_id and dds.destination_id = p.partition_number
LEFT OUTER JOIN sys.filegroups AS fg ON fg.data_space_id = dds.data_space_id or fg.data_space_id = idx.data_space_id
WHERE (p.partition_number=1)
go



参考: https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-into-clause-transact-sql


目录
相关文章
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
10月前
|
SQL
SQL中搜索中文无效或Select中文变乱码
SQL中搜索中文无效或Select中文变乱码
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
2257 0
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
SQL 数据库
DBeaver执行sql文件
本文介绍了DBeaver这款支持多种数据库的通用数据库管理工具和SQL客户端,它具备查看数据库结构、执行SQL查询和脚本、浏览和导出数据等功能。
4051 1
DBeaver执行sql文件
|
SQL 关系型数据库 MySQL
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
1830 1
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")