前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[SQLServer大对象]——FileTable从文件系统迁移文件

[SQLServer大对象]——FileTable从文件系统迁移文件

作者头像
数据分析
发布2018-03-01 16:56:57
1.3K0
发布2018-03-01 16:56:57
举报
文章被收录于专栏:数据分析数据分析

阅读导航

从文件系统中迁移文件到FileTable

批量加载文件到FileTable

如何批量加载文件到FileTable

通过博文[SQLServer大对象]——FileTable初体验,已经可以将文件加载到数据库中,并查看和访问这些文件。

将文件加载到 FileTable,可以使用工具xcopy或robocopy,也可以自己编写脚本(如PowerShell)或者应用程序,复制文件到FileTable中。

现在说一说文件的迁移。

从文件系统中迁移文件到FileTable

迁移文件条件

    文件存储在文件系统中

    在 SQL Server 中元数据的表包含一个指向文件的指针

执行前提

要将文件迁入到 FileTable,需要将每一个文件的原始UNC路径用FileTable的UNC路径代替。

现在我们假定现有 FileTable PhotoMetadata 包含图片数据,。这个表有一个varchar(512)类型的UNC路径列,其中包含执行.jpg文件的实际路径。

将.jpg及其目录结构一起复制到FileT的根目录下。

执行

使用代码修改 PhotoMetadata 的元数据:

代码语言:js
复制
   1:  --  添加一个路径定位器到 PhotoMetadata。
   2:  ALTER TABLE PhotoMetadata ADD pathlocator hierarchyid;
   3:   
   4:  -- 获得在文件系统中图片的根路径。
   5:  DECLARE @UNCPathRoot varchar(100) = '\\RemoteShare\Photographs';
   6:   
   7:  -- 获得FileTable的根路径。
   8:  DECLARE @FileTableRoot varchar(1000);
   9:  SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');
  10:   
  11:  -- 更新PhotoMetadata。
  12:   
  13:  -- 使用 FileTable 路径代替文件系统 UNC 路径。
  14:  UPDATE PhotoMetadata
  15:      SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);
  16:   
  17:  -- 更新 FileTable 的 pathlocator 列。 
  18:  UPDATE PhotoMetadata
  19:      SET pathlocator = GetPathLocator(UNCPath);

批量加载文件到FileTable

对于批量操作,FileTable和其他表基本一样,但是有些需要注意的地方。

FileTable有系统定义的约束,这些约束是为了确保文件的完整性和目录空间具有可维护性。这些约束验证数据批量加载到FileTable中。由于一些大量插入操作允许忽略表约束,所以接下来的是被强制要求的。

强制约束的批量加载操作可以像在任何其他表一样在 FileTable使用,具体操作如下:

        bcp 带 CHECK_CONSTRAINTS 子句。

        BULK INSERT 带 CHECK_CONSTRAINTS 子句。

        INSERT INTO … SELECT * FROM OPENROWSET(BULK …) 不带 IGNORE_CONSTRAINTS 子句。

非强制约束的批量加载操作会失败,除非 FileTable 系统定义的约束已禁用,具体操作如下:

        bcp 不带 CHECK_CONSTRAINTS 子句。

        BULK INSERT 不带 CHECK_CONSTRAINTS 子句。

        INSERT INTO … SELECT * FROM OPENROWSET(BULK …) 带 IGNORE_CONSTRAINTS 子句。

如何批量加载文件到FileTable

可以使用多种方法批量加载文件到FileTable:

bcp

        使用 CHECK_CONSTRAINTS 子句。

        禁用FileTable命名空间,并且不使用 CHECK_CONSTRAINTS 子句。然后重新启用FileTable命名空间。

BULK INSERT

        使用 CHECK_CONSTRAINTS 子句。

        禁用FileTable命名空间,并且不使用 CHECK_CONSTRAINTS 子句。然后重新启用FileTable命名空间

INSERT INTO … SELECT * FROM OPENROWSET(BULK …)

        使用 CHECK_CONSTRAINTS 子句。

        禁用FileTable命名空间,并且不使用 CHECK_CONSTRAINTS 子句。然后重新启用FileTable命名空间

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-07-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档