如何将文件表与SQL Server中的现有表链接

问题描述 投票:0回答:1

我要求在数据库中保存员工形象。我被要求使用文件表。在谷歌搜索后,我得到了一些关于如何开始使用文件表的好内容。我设法创建它们,同样向这些表插入数据就像复制/粘贴到指定文件夹一样简单,数据也会插入到表中。问题是如何将每个员工行集与其各自的imagesSample row data from the Filetable相关联

整体流程就像员工将通过前端上传他/她的图像或文档,这将把图像保存在服务器上。问题是如何添加员工的参考与其各自的形象。一个选项可以是在employee表中有一个FileName列,它引用FileTable中的name列,但是我需要更高效的东西,例如关联id。任何其他实现这一目标的方式将不胜感激。

sql .net sql-server-2012
1个回答
0
投票

首先,它耗费了大量时间来完成工作,因为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

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.