如何将文件表与SQL Server中的现有表链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将文件表与SQL Server中的现有表链接相关的知识,希望对你有一定的参考价值。
我要求在数据库中保存员工形象。我被要求使用文件表。在谷歌搜索后,我得到了一些关于如何开始使用文件表的好内容。我设法创建它们,同样向这些表插入数据就像复制/粘贴到指定文件夹一样简单,数据也会插入到表中。问题是如何将每个员工行集与其各自的images相关联
整体流程就像员工将通过前端上传他/她的图像或文档,这将把图像保存在服务器上。问题是如何添加员工的参考与其各自的形象。一个选项可以是在employee表中有一个FileName列,它引用FileTable中的name列,但是我需要更高效的东西,例如关联id。任何其他实现这一目标的方式将不胜感激。
首先,它耗费了大量时间来完成工作,因为filetable是从SQLSERVER 2012开始引入的新功能。其次,这是我采取的解决问题的方法。我将提供一些有用的链接,以使其他开发人员的生活更轻松。希望能帮助到你。
文件表几乎与普通的SQL表类似,但是有一些配置要启动它,因为它位于数据库的单独部分,在表 - > FIleTables中。由于表结构是预定义的,因此无法更改表模式。所以我采用的方法是引用stream_id作为引用键来链接我想要使用的表,并通过存储过程处理约束逻辑。在我的场景中,Employee表将有一个stream_id列,它将通过stream_id链接到File表,也使File表中的行唯一,我插入了Employee Id作为存储图像的名称,而不是实际的名称文件。即使有人试图通过复制/粘贴直接插入文件,它也与Employee表没有任何关系,你也可以提供访问权限以获得所需的权限。查看链接以获取更多详细信息。就是这样,通过一些调整,我能够解决我的问题。下面的SQL脚本将有助于一次激活实例级别的文件流。
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
GO
--For new DB
CREATE DATABASE <DATABASE name>
WITH FILESTREAM
(
NON_TRANSACTED_ACCESS = FULL,
DIRECTORY_NAME = N'<DIRECTORY name>'
);
GO
--If you have an existing DB
ALTER DATABASE <DATABASE name>
ADD FILEGROUP <File group name>
CONTAINS FILESTREAM
GO
ALTER DATABASE <DATABASE name>
ADD FILE (NAME='<File group name>', FILENAME='<DIRECTORY name>')
TO FILEGROUP <File group name>
GO
ALTER DATABASE <DATABASE name>
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'<File
group name>')
GO
use <DATABASE name>
GO
CREATE TABLE <Filetable NAME> AS FileTable;
GO
还有一些非常有用的链接:
https://www.mssqltips.com/sqlservertip/2667/filetable-feature-in-sql-server-2012/
http://sql-articles.com/articles/general/working-with-filetables/
https://michaelfirsov.wordpress.com/working-with-sql-server-file-tables-part-1/
https://michaelfirsov.wordpress.com/working-with-sql-server-file-tables-part-2/
https://msdn.microsoft.com/pl-pl/library/gg492084(v=sql.110).aspx
谢谢。
以上是关于如何将文件表与SQL Server中的现有表链接的主要内容,如果未能解决你的问题,请参考以下文章
如何将 R 数据框插入到 SQL Server 中的现有表中