ورود

View Full Version : مشکل در به کار گیری File Table در SQL Server 2012



Mousavmousab
پنج شنبه 09 بهمن 1393, 11:12 صبح
سلام

سرویس File Table در SQL Server 2012

تو طراحی بانک نیاز شد که از سرویس File Table استفاده کنم.

همانطور که می دونید File Table خودش فیلد های جدول را می سازه و نمیش بهش فیلدی اضافه کرد.


من قبلاٌ به صورت P.k و F.k دو جدول را به هم مرتبط می کردم و با join هایی که می زدم به نتیجه مطلوب می رسیدم.
الان توی File Table من فیلدی ندارم که ازش توی جدول دیگه استفاده کنم. یعنی دقیقاٌ مشکل من اینه که بعد از اینکه با File Table جدول مربوط به نگهداری فایل ها را ساختم ، نمی دونم چطوری باید به جدول دیگه ام ارتباط بدم. چون من قبلا فیلدی primark داشتم که از نوع int بوده ولی الان توی File Table فیلد یکتا Stream_ID است.

دوستانی که با File Table کار کردن راهنمایی کنن لطفاٌ. ممنون میشم.

فرض کنید من دارم یه سایت موزیک می سازم و قرار است چند آهنگ مربوط به یک آلبوم را به یک پست از خواننده ارتباط بدم.

به تصویر فرضی زیر توجه کنید.

128010

به ازای یک رکورد از جدول post باید چندین رکورد از جدول File Table را نگهداری کنم. حالا نوع رابطه مهم نیست اصلاٌ رابطه یک به یک باشه. مهم اینه من از فیلد Stream_ID چطور در جدول Post استفاده کنم ؟ در رابطه باید نوع فیلد ها با هم یکی باشه.

Mousavmousab
پنج شنبه 09 بهمن 1393, 22:31 عصر
از مدیران ، صاحب نظران ، دوستان و ... خواهش می شود اگر در مورد این سرویس اطلاعی دارید بفرمایید.

چند روزی است Search می کنم ولی اطلاعات کلی به دست می آرم .

Mousavmousab
دوشنبه 13 بهمن 1393, 19:37 عصر
واقعاٌ کسی با File Table کار نکرده ؟

دوستان کمک کنید. :افسرده:

Mousavmousab
پنج شنبه 16 بهمن 1393, 13:59 عصر
چند وقته هر چی پست میزنم کسی جوابمو نمیده ! دلیلش چی می تونه باشه؟
نظرتونو بگین !!!

مهدی نان شکری
جمعه 17 بهمن 1393, 23:22 عصر
دوست عزیز
شما می توانید همون stream_id رو در جداولتون استفاده کنید. مانند همه رابطه هایی که در جداولتون هست.
اگر مشکل در گرفتن مقدار stream_id هست که می توانید به کمک OUTPUT INSERTED در هنگام insert مقادیر رو دریافت کنید.
مثلا

INSERT INTO Images(name,is_directory,is_archive)
OUTPUT INSERTED.[stream_id], INSERTED.path_locator into @tempTable

fahimi
پنج شنبه 03 اردیبهشت 1394, 05:08 صبح
با سلام به بفرض

INSERT INTO FileTableTb(name, file_stream)
VALUES ('Actor.bmp', (SELECT * FROM OPENROWSET(BULK N'E:\Actor.bmp', SINGLE_BLOB) as Data))


از OUTPUT INSERTED چگونه استفاده می شود؟

fahimi
پنج شنبه 03 اردیبهشت 1394, 13:45 عصر
INSERT INTO FileTableTb(name, file_stream)
output inserted.stream_id,inserted.name,'2546' into RelTbl
VALUES ('Actor.bmp', (SELECT * FROM OPENROWSET
(BULK N'E:\Actor.bmp', SINGLE_BLOB) as Data))

من یک تیبل ایجاد کردم به نام RelTbl با ساختار :

CREATE TABLE [dbo].[RelTbl](
[stream_id] [uniqueidentifier] NULL,
[Filename] [nvarchar](50) NULL,
[ID] [int] NULL
) ON [PRIMARY]


به این صورت با یک Id می توان چندین stream_id ذخیره کرد.
آقای مهدی نان شکری ممنونم از راهنمایی شما

fahimi
یک شنبه 06 اردیبهشت 1394, 20:14 عصر
INSERT INTO FileTableTb(name, file_stream)
output inserted.stream_id,inserted.name,'2546' into RelTbl
VALUES ('Actor.bmp', (SELECT * FROM OPENROWSET
(BULK N'E:\Actor.bmp', SINGLE_BLOB) as Data))


مشکلی که به آن برخوردم ، از روش بالا نتوانستم از کلاینت فایل به سرو ارسال کنم . در واقع با اینکه فایل از مسیر هارد دیسک کلاینت انتخاب می شود ولی کوئری در مسیری سرور دنبال فایل را می خواهد کپی کند . که دچار خطا می شود به هر حال یک جای کار اشکال دارد.

emad4000
سه شنبه 09 تیر 1394, 11:34 صبح
مشکلی که به آن برخوردم ، از روش بالا نتوانستم از کلاینت فایل به سرو ارسال کنم . در واقع با اینکه فایل از مسیر هارد دیسک کلاینت انتخاب می شود ولی کوئری در مسیری سرور دنبال فایل را می خواهد کپی کند . که دچار خطا می شود به هر حال یک جای کار اشکال دارد.

سلام
خوب چرا برای فیلد file_stram داده از نوع VARBINARY(MAX) نمی فرستید ؟

DECLARE @fileName nvarchar(50)
DECLARE @myBinaryDate VARBINARY(MAX)

INSERT INTO FileTableTb(name, file_stream)
output inserted.stream_id,inserted.name,'2546' into RelTbl
VALUES (@fileName, @myBinaryDate))