[英]SQL-SERVER Procedure How do i insert row one table then insert row into another table link to another table as foreign key
[英]How do I link the File Table with my existing table in SQL server
首先,由於文件表是 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.