אחת הבעיות שנתקלים אלו שרוצים לשמור בבסיס הנתונים קבצים כמו תמונות או וידאו וכו' בתוך שדות BLOB הוא שזה מנתח את קבצי הדטבייס, ומאוד לא שימושי מעשית בשל כך.
ה-File Stream שהתווסף בגרסת 2008 מאפשר להוסיף קבצים כך שהם מאוחסנים כקבצים נפרדים במחיצה יעודית ואינם משפיעים על גודלו של הדטבייס.
ניצור דטבייס חדש במחיצה מתאימה:
Use Master
Go
If Exists (Select Name From sys.databases Where Name = 'FileStream') Drop Database FileStream
Go
xp_cmdshell 'If Exist C:\FileStream RD C:\FileStream/S/Q'
Go
xp_cmdshell 'MD C:\FileStream'
Go
Create Database FileStream On Primary(Name='FileStream',
FileName='c:\FileStream\FileStream.mdf')
Log On (Name='FileStreamDB_log',
FileName = 'c:\FileStream\FileStreamDB_log.ldf')
Go
Alter Database FileStream
Add FileGroup FileStreamGroup Contains FileStream
Go
Alter Database FileStream
Add File (Name = N'FileStreamDB_FSData',
FileName = N'c:\FileStream\FileStreamData')
To FileGroup FileStreamGroup
Go
ניצור טבלה מתאימה:
Use FileStream
Go
Create Table T_FileStream(ID Int Identity(1,1) Not Null,
FileStream VarBinary(Max) FileStream Null,
FileStreamGuid UniqueIdentifier RowGuidCol Not Null Unique Default NewSequentialID(),
Taarih DateTime Default GetDate())
FileStream_On FileStreamGroup
Go
כדי לאפשר שימוש ב-File Stream יש לאפשר זאת בשלב ראשון כך:
Exec sp_configure 'show advanced options'
Go
Exec sp_configure filestream_access_level, 2
Go
Reconfigure With Override
Go
ולאחר מכן, בתפריט של SQL Server (דרך Start/התחל) => Configuration Tools => ו-SQL Server Configuration Manager:
יש לבחור ב-SQL Server Services, קליק ימני על השרת המתאים (אם יש כמה), Properties ולסמן את שלוש האפשרויות.

יש להכין מספר קבצים, למשל- את חמשת הקבצים הבאים ניתן לשמור במחיצה C:\Tmp בשם x.jpg (כאשר ס בדוגמה שלהלן הוא 1 או 2 או 3 או 4 או 5) על ידי קליק ימני ו-Save File As:
(אלו הם חמישה קבצים גרפיים- מעשה ידי להתפאר, למי שתמה על מקור יצירות האומנות האלו)
ונייבא אותם לטבלה הנ"ל כך:
Insert Into T_FileStream (FileStream)
Select * From OpenRowset(Bulk N'C:\Tmp\1.jpg' ,Single_Blob) T;
Insert Into T_FileStream (FileStream)
Select * From OpenRowset(Bulk N'C:\Tmp\2.jpg' ,Single_Blob) T;
Insert Into T_FileStream (FileStream)
Select * From OpenRowset(Bulk N'C:\Tmp\3.jpg' ,Single_Blob) T;
Insert Into T_FileStream (FileStream)
Select * From OpenRowset(Bulk N'C:\Tmp\4.jpg' ,Single_Blob) T;
Insert Into T_FileStream (FileStream)
Select * From OpenRowset(Bulk N'C:\Tmp\5.jpg' ,Single_Blob) T;
Go
בטבלה לא נראה כמובן אף תמונה אלא רק קודים הקסדצימליים, אך אם נחטט במחיצות שמתחת ל-c:\FileStream\FileStreamData נמצא תת-תת-מחיצה בה יש חמישה קבצים כנגד חמשת הקבצים שקלטנו לטבלה, ומי שיעתיק אחד מהם למחיצה אחרת וישנה את הסיומת שלו למקורית (jpg בדוגמה הזו) – יוכל לפתוח אותו כקובץ גרפי.
ל-SQL Serverעצמו אין יכולת מובנית לשחזור הקבצים או ליצוא שלהם מהטבלה למחיצה (כשם שאפשר לייבא), ולמיטב הבנתי יש צורך בכלים אחרים כדי לעשות זאת או כדי להשתמש במידע שבטבלה.
[...] פי הצורך, וליצור ממשק משתמש משל עצמנו. מגרסת 2008 התווספה אופציית ה-FileStream: כעת יש אפשרות לשמור את הקבצים החיצוניים כך שאינם חלק [...]
פינגבאק מאת FileTable ב-SQL Server 2012 - גרי רשף — 22/12/2011 @ 21:02
[...] פי הצורך, וליצור ממשק משתמש משל עצמנו. מגרסת 2008 התווספה אופציית ה-FileStream: כעת יש אפשרות לשמור את הקבצים החיצוניים כך שאינם חלק [...]
פינגבאק מאת FileTable ב-SQL Server 2012 « הבלוג של גרי רשף — 22/12/2011 @ 20:54
[...] בנפרד על הדיסק והדטבייס שומר על גודל שפוי (כתבתי על כך פוסט בעבר), אבל אני אעסוק כאן דווקא בפתרון [...]
פינגבאק מאת שמירת קבצים בתוך טבלה - גרי רשף — 18/09/2011 @ 18:45
[...] בנפרד על הדיסק והדטבייס שומר על גודל שפוי (כתבתי על כך פוסט בעבר), אבל אני אעסוק כאן דווקא בפתרון [...]
פינגבאק מאת שמירת קבצים בתוך טבלה « הבלוג של גרי רשף — 18/09/2011 @ 18:42
דוגמא לקריאה וכתיבה באמצעות קוד
http://www.mssqltips.com/tip.asp?tip=1489
העניין הוא שיש מקרים נדירים להשתמש בשמירה מסוג זה.
תגובה מאת פלג — 12/07/2010 @ 14:04
תודה על המידע!
דוט נט אינו התחום שלי, אבל ביום מן הימים אצטרך להתיידד איתו יותר..
תגובה מאת גרי רשף — 14/07/2010 @ 14:11