簡體   English   中英

如何將文件表與 SQL Server 中的現有表鏈接

[英]How do I link the File Table with my existing table in SQL server

我需要將員工圖像保存在數據庫中。 我被要求使用文件表。 在谷歌搜索之后,我得到了一些關於如何開始使用文件表的好內容。 我設法創建了它們,將數據插入到這些表中就像復制/粘貼到指定文件夾一樣簡單,然后將數據插入到表中。 問題是我如何將每個員工行集與其各自的圖像相關聯來自 Filetable 的示例行數據

整個流程就像員工通過前端上傳他/她的圖像或文檔,將圖像保存在服務器上。 問題是如何添加員工的參考及其各自的圖像。 一種選擇是在員工表中有一個 FileName 列,它指的是 FileTable 中的 name 列,但我需要一些更有效的東西,例如關聯 ID。 實現這一目標的任何其他方式將不勝感激。

首先,由於文件表是 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

謝謝。

在雇主和文件表之間有一個“加入(多對多)表”不是一樣容易嗎? 您不必將其用作多對多表。 將其命名為 EmployeeImages 並添加描述屬性/屬性,即“招聘照片”、“剛被解雇的照片”。 使用來自employee 和filetable 的主鍵。 簡單!

您必須在程序中插入復制文件的代碼。 File.Copy(...)而不是僅僅復制和粘貼到文件系統中。 這樣,您的 File.Copy 執行的每個實例,您都可以獲得其各自的 stream_id,然后將其附加到您的員工表上..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM