# پایگاه‌های داده > SQL Server > T-SQL >  ايمپورت از اكسل به اسكيوال

## nickandish

با سلام به دوستان
نمي دونم از اينكه سوالم رو اينجا مطرح مي كنم درست  يا نه . به هر حال ببخشيد.
من مي خوام يك سري اطلاعات از فايل اكسل ايمپورت كنم تو جدول ديتابيسم. براي اين كار از دستور زير استفاده مي كنم
ADOTable1->FieldByName("column name")->AsString
سوال اينه كه به عنوان پارامتر بايد نام ستون رو وارد كنم كه به طور پيش فرض اكسل سطر اول رو نام ستون ها در نظر مي گيره. ولي من مي خوام حروف مربوط به هر سطر مثلا A , B , c , .... به عنوان نام ستون هام باشه. يعني كاربر در برنامه يكي از اين حروف رو وارد كنه و من بر اساس اون مقدار ستون مربوطه رو جايگزين كنم.مثلا كاربر
hello dear #A# .how are you
رو وارد كنه . و برنامه مقدار ستون A رو جايگزين كنه.
ممنون ميشم اگر من رو راهنمايي كنيد. بي صبرانه منتظر پاسخ شما عزيزان هستم.
جاودانه باشيد و تندرست

----------


## Galawij

سلام دوست عزیز، 
شما اول یک جدول ایجاد کنید، و اسم سطرها را متناسب با حروف لاتین (A,B,C, ... , Z) قرار بدید.بعد محتویات فایل EXCEL را وارد این Table بکنید. دستورش به این صورت می شه (FOR Excel 2007-2010):

DECLARE @myfile varchar(800)
SET @myfile ='D:\Book1.xlsx'
EXEC('Insert INTO dbo.YourTable Select * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0 Xml;HDR=YES;Database='+ @myfile +''', '' SELECT * FROM [Sheet1$]'')')

----------


## mrm0101

سام . این کد در اس کیو ال سرور 2008 کار نمی کند . کسی از دوستان در اس کیو ال سرور 2008 از اکسل به دیتا بیس اطلاعات وارد کرده است . با تشکر

----------


## Galawij

> این کد در اس کیو ال سرور 2008 کار نمی کند . کسی از دوستان در اس کیو ال سرور 2008 از اکسل به دیتا بیس اطلاعات وارد کرده است .


سلام، 
راه های زیادی برای این کار وجود دارد:
استفاده از Import\Exportاز طریق Integration Servicesاز طریق کد نویسی( برای Sql 2008):DECLARE @myfile varchar(800)
SET @myfile ='E:\Other\Book1.xlsx'
EXEC('SELECT * INTO dbo.YourTable FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database='+ @myfile +''', '' SELECT * FROM [Sheet1$]'')')
البته در صورت استفاده از روش آخر حتماً قبلش این لینک را مطالعه بفرمائید، و گزینه "AdHocRemoteQueriesEnabled" را روی True تنظیم کنید، تا با خطا مواجه نشید.

----------


## یوسف زالی

سلام.
نیازی به exec نیست.
خود پارامتر های OPENROWSET رشته هست..

----------


## Galawij

> نیازی به exec نیست.
> خود پارامتر های OPENROWSET رشته هست..


EXEC را برای نام فایل اکسل به کار بردم...
به صورت پارامتر پاس دادم.

----------


## یوسف زالی

نه، متوجه منظورم نشدید، خود نام رشته هست. چیزی هم که باهاش جمع می شه رشته هست.
در این صورت نیازی به دوباره رشته کردنش نیست:
SELECT * INTO dbo.YourTable FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database='+ @myfile, 'SELECT * FROM [Sheet1$]')-- sql

----------


## Galawij

> SELECT * INTO dbo.YourTable FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database='+ @myfile, 'SELECT * FROM [Sheet1$]')-- sql


اجراش کردم، متأسفانه کار نمی کنه!
بهتره در صورتی که مسیر و نام فایل را به صورت پارامتری می فرستیم از کد پست 4 استفاده کرد و در صورتی که به صورت پارامتری نیست، مستقیماً وارد دستور کرد:
SELECT * INTO dbo.YourTable FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\Other\Book1.xlsx', 'SELECT * FROM [Sheet1$]')

----------


## sm4899

با سلام


با اجرای دستورات فوق این پیغام داده میشه

Msg 15281, Level 16, State 1, Line 27
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.

----------

