ورود

View Full Version : اجرای دستورات موجود در فایل



damanpak
پنج شنبه 10 مرداد 1392, 21:52 عصر
سلام به همه اساتید
دوستان فرض کنید یک فایل در رایو C بنام sqlcommand.txt دارم که حاوی دستورات اس کیو ال هست مثل
Select * from mytbl
insert into mytbl values(1,2,3,4)

حال چطوری به sql بفهمونم که دستوراتشو از فایل مورد نظر بخونه و اجرا کنه؟:متفکر:

webtracker
پنج شنبه 10 مرداد 1392, 22:20 عصر
می بخشید می تونم بپرس چرا از پروسیجر یا تریگر استفاده نمی کنید به جای این که تو یک فایل جدا ذخیره کنید؟

damanpak
پنج شنبه 10 مرداد 1392, 22:33 عصر
سلام دوباره
دستورش رو پیدا کردم اینه اما مشکل اینه که حالت EXCUTE MODE به حالت جدول نیست
exec master..xp_cmdshell 'sqlcmd -s . -i C:\sqlcommand.txt'

می بخشید می تونم بپرس چرا از پروسیجر یا تریگر استفاده نمی کنید به جای این که تو یک فایل جدا ذخیره کنید؟
آره که میشه دلیلش رو بدونید
این مثال زیادم جالب نیست اما واسه تفهیم کار بد نیست
فرض کنید یک مصالح فروشی میخواد مصالح لازم برای ساخت مثلا یه اتاق رو بده(مثل گچ-سیمان-آجر و...)
حال میخواد یک گروه توی برنامه داشته باشه مثلا با نام "اتاق"
وقتی رو این گروه کلیک میکنه برنامه طول و عرض اتاق رو بگیره و بر اساس طول و عرض بیاد مواد لازمی که واسه ساخت این اتاق لازمه رو توی لیست بیاره
مثلا بگه 7 کیسه گچ و...
از اونجا که ممکنه این مشتری بخواد چندین بیش از 10 گروه توی برنامه اش داشته باشه فکر نمیکنم استفاده از پروسیجر کار درستی باشه
ضمنا اگه با پروسیجر بخوام انجام بدم اولین اشکالی که هست تعداد زیاد گروه ها است و دومین مشکل اینه که هروقت مشتری بخواد یک گروه جدید بسازه مجبورم برم و براش این کار رو بکنم که بازم جالب نیست
پس تصمیم گرفتم دستوراتشو توی فایلهای تکست که حجم کمی دارن بزارم و هروقت که مشتری بخواد گروه جدید درست کنه درعمل یک فایل تکست جدید داره اضافه میشه نه یک پروسیجر
حال اگه این کارم درست نیست و یا راه حل بهتری دارید خوشحال میشم کمک کنید

webtracker
جمعه 11 مرداد 1392, 00:06 صبح
این چیزی که من از توضیح شما برداشت کردم در اصل ارتباط مصالح با طول و عرض میشه و گروه ها همین طول و عرض ها تولید می کنند پس نیاز شما تنها ایجاد ارتباط بین واحدهاست و وقتی که رابطه درست ایجاد شد دیگه هر گروه رو می تونید از این فرمول بدست بیارید بخه جای اینکه برای هر گزوه یک حالت مستقل بدست بیارید

damanpak
جمعه 11 مرداد 1392, 00:12 صبح
ممنون از پاسختون
اگه میشه با یک مثال برام توضیح بدین

webtracker
جمعه 11 مرداد 1392, 01:07 صبح
مثلا هر واحد 2در2 ،یک کیلو گچ،یک کیلو سیمان ،غیره نیاز دارد حال اگر اتاق از 10 تا واحد 2در 2 تشکیل شده باشه پس به 10 کیلو گچ و غیره نیاز دارد

محمد سلیم آبادی
جمعه 11 مرداد 1392, 02:43 صبح
سلام به همه اساتید
دوستان فرض کنید یک فایل در رایو C بنام sqlcommand.txt دارم که حاوی دستورات اس کیو ال هست مثل
Select * from mytbl
insert into mytbl values(1,2,3,4)

حال چطوری به sql بفهمونم که دستوراتشو از فایل مورد نظر بخونه و اجرا کنه؟:متفکر:

سلام،
مثال دوم این پست را بخوانید:
http://puresql.blogsky.com/1392/05/11/post-12/xp-cmdshell

damanpak
جمعه 11 مرداد 1392, 16:53 عصر
سلام دوباره به همه
اول جای تشکر داره که از هردو دوست عزیز جناب Webtracker و جناب سلیم آبادی تشکر کنم که پاسخ دادن و همکاری کردند
اون چیزی که میخواستم بالاخره جوابشو با کمک این دو دوست عزیز پیدا کردم و شد این
CREATE TABLE #tmp (ids smallint identity(1,1),code varchar(8000))
insert into #tmp
exec master..xp_cmdshell 'type C:\1.txt '
declare @cnt smallint,@sql varchar(8000)
set @cnt=1
set @sql=''
while @cnt<=(select max(ids)from #tmp)
begin
set @sql=@sql+(select code from #tmp where ids=@cnt)
set @cnt=@cnt+1
end
select len(@sql)
exec(@sql)
drop table #tmp

محمد سلیم آبادی
جمعه 11 مرداد 1392, 22:56 عصر
while @cnt<=(select max(ids)from #tmp)
begin
set @sql=@sql+(select code from #tmp where ids=@cnt)
set @cnt=@cnt+1
end

برای الحاق کردن سطرها نیاز به حلقه نداره! راحت تر اونی هست که در وبلاگم قرار دادم یعنی این:


select @sql+=isnull(i,'')+char(13) from @t


ضمنا باعث هوشیار باشید که در متن فایلتان خط خالی وجود نداشته باشه! چون مقدار null برمیگردونه xp_cmdshell و مقدار پوچ هم با اون متغیر جمع بشه نتیجش پوچ خواهد بود!

damanpak
شنبه 12 مرداد 1392, 04:17 صبح
برای الحاق کردن سطرها نیاز به حلقه نداره! راحت تر اونی هست که در وبلاگم قرار دادم یعنی این:


select @sql+=isnull(i,'')+char(13) from @t


ضمنا باعث هوشیار باشید که در متن فایلتان خط خالی وجود نداشته باشه! چون مقدار null برمیگردونه xp_cmdshell و مقدار پوچ هم با اون متغیر جمع بشه نتیجش پوچ خواهد بود!

سلام و ممنون از پاسختون
اما این دستور شما توی اس کیو ال 2000 جواب نداد

محمد سلیم آبادی
شنبه 12 مرداد 1392, 14:46 عصر
سلام و ممنون از پاسختون
اما این دستور شما توی اس کیو ال 2000 جواب نداد
به خاطر =+
بجاش بنویسید

@sql = @sql + ...

damanpak
شنبه 12 مرداد 1392, 19:00 عصر
به خاطر =+
بجاش بنویسید

@sql = @sql + ...

ممنون جواب داد

محمد سلیم آبادی
شنبه 12 مرداد 1392, 21:30 عصر
تعجب میکنم از دوستان که چطوره که هنوز از نسخه 2000 دارن استفاده میکن.
نسختون رو به 2012 ارتقاء بدین و از امکانات جدید آن مخصوصا در زمینه Query لذت ببرید.

damanpak
یک شنبه 13 مرداد 1392, 00:24 صبح
تعجب میکنم از دوستان که چطوره که هنوز از نسخه 2000 دارن استفاده میکن.
نسختون رو به 2012 ارتقاء بدین و از امکانات جدید آن مخصوصا در زمینه Query لذت ببرید.

من شخصا بخاطر اینکه
1-زمان نصب واسه مشتری نیاز نیست کل اس کیو ال رو نصب کنم و فقط یک فایل 44 مگاباتی کافیه واسه اس کیو ال اما(این نظر منه که شایدم اشتباه باشه)اس کیوا های وژن بالاتر باید کل اس کیو ال رو نصب کنیم
2-نیاز به کوئری های آنچنانی ندارم که بخوام با نسخه های بالاتر کار کنم