اتچ نشدن sql server 2012 در vs 2010
سلاممن یه دیتابیس توی اس کیو ال سرور ۲۰۱۲ درست کردم. و وقتی که میخوام اون رو به ویژوآل استودیو ۲۰۱۰ اتچ کنم با پیغام خطای زیر رو میده. ممنون میشم کمکم کنید.
کد:
---------------------------Microsoft Visual Studio---------------------------The database 'D:\DBName.MDF' cannot be opened because it is version 706. This server supports version 655 and earlier. A downgrade path is not supported.Could not open new database 'D:\DBName.MDF'. CREATE DATABASE is aborted.An attempt to attach an auto-named database for file D:\DBName.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.---------------------------OK ---------------------------
شاید من به شیوه درستی اکسترکت نمیکنم دیتابیسم رو از توی اس کیو ال سرور . اگه اینطور هست در این رابطه هم راهنماییم کنید.ممنون
SSMS: Generate SQL Scripts
سلام
پس از تایید و تشکر از دوست خوبمان senaps در ادامه صحبت ایشان میتوانم اضافه کنم...
برای ساخت SQL دیتابیس از برنامه SSMS استفاده میکنیم که همراه نسخه های غیر رایگان نصب میشود و نسخه رایگان Express خودش هم وجود دارد.
مطلب اول آنکه، ترجیحاً از SSMS2008 بجای SSMS2012 استفاده کنید که در ادامه دلیلش را خواهم گفت.
مطلب دوم آنکه، توجه داشته باشید SSMS یک ابزار جانبی است و ارتباط مستقیمی با هسته SQLServer ندارد.
به این معنی که شما میتوانید از SSMS2012 جهت ارتباط با MSSQL2005 استفاده کنید
یا از SSMS2005 جهت ارتباط با MSSQL2012 استفاده کنید و...
=====
برای شروع ویزارد مربوطه مراحل زیر را دنبال کنید:
کد:
YourDatabase > RightClick > Tasks > Generate Scripts
...
Next >
Check: (2005) Script all objects in the selected database
OR..
Check: (2008/2012) Script entire database and all database objects
Next >
اگر مسیر را صحیح طی کرده باشید به صفحه ای میرسید که دکمه Advanced سه دکمه رادیویی دارد:
Save to File
جهت ذخیره SQL نهایی در یک فایل (برای دیتابیس های بزرگ فقط از این گزینه استفاده کنید)
Save to new query window
SQL نهایی را یک فرم درون محیط خود SSMS درج و نشان میدهد. (*فعلاً همین را انتخاب کنید)
Save to Clipboard
SQL نهایی را ساخته و تمام آن را در حافظه Clipboard کپی میکند که آماده Paste در مقصد خواهد بود. (برای دیتابیس های بزرگ مناسب نیست)
دکمه Advanced را کلیک کنید:
گزینه های زیر را تنظیم کنید:
کد:
Generate Script for Dependent Objects = True
Script Check Constraints = True
Script Foreign Keys = True
Script Indexes = True
Script Primary Keys = True
Script Triggers = True
Script Unique Keys = True
Script Extended Properties = False
Script for Server Version = SQL Server 2005
دوگزینه مهم دیگر باقی می ماند
اول: Script DROP and CREATE
Script CREATE
جهت دستورات ساخت دیتابیس از صفر
Script DROP and CREATE
جهت حذف اشیای قبلی و ایجاد اشیای جدید، به عنوان مثال بروز رسانی ساختار پروسیجر ها و ویوها و...
***هشدار: اگر منظورتان بروزرسانی دیتابیس است، این عمل محتویات ذخیره شده جداول قبلی را حفظ نخواهد کرد***
دوم: Types of data to script
Schema only
ایجاد دستورات ساخت دیتابیس (CREATE)
Data only
ایجاد دستورات درج مقادیر داده ها (INSERT)
Schema and data
ایجاد هر دو گروه دستورات فوق
در نهایت همه چیز را تایید و OK کنید و منتظر به پایان رسیدن عملیات بمانید...
در صفحه نهایی دستوری شبیه این برایتان ایجاد میشود:
کد:
USE [master]
GO
...
...
...
USE [YourDatabaseName]
GO
...
...
میخواهید بخوانید و متوجه شوید ایراد ندارد ولی پیشنهاد میکنم دستورات تا شروع USE دوم را بطور کامل حذف و پاک کنید تا به چیزی شبیه این برسید:
کد:
USE [YourDatabaseName]
GO
...
...
خوب! تمام شد، SQL شما حاضر است. فایل را ذخیره کنید. (یک لحظه حس آشپزی پیدا کردم :n02:)
اگر همه چیز به خوبی انجام شده باشد میتوانید با Execute فایل فوق در یک دیتابیس خالی در هر محلی، مجدد دیتابیس فعلی تان را ایجاد کنید.
=====
پیش از این، گفتم که ترجیحاً از SSMS2008 بجای SSMS2012 استفاده کنید.
این بدان دلیل است که گزینه Dependent در SSMS2008 به درستی کار میکند.
ولی در نسخه SSMS2012 با تغییراتی که مایکروسافت در SQLServer2012 داده این گزینه دیگر لازم نیست و با وجودی که در SSMS2012 وجود دارد ولی کار نخواهد کرد.
این گزینه وابستگی اشیای دیتابیس شما را کشف و ترتیب ایجاد آنها را مشخص میکند.
مثلاً اگر درجایی از Proc1 درون کد Proc2 را فراخوانی کرده باشید، پس اول باید Proc2 ساخته شود و سپس Proc1 ساخته شود تا دستور ساخت Proc1 به خطا برنخورد که Proc2 ای وجود ندارد و نمیشناسم ...
این ترتیب ایجاد برای SQLServer ها قبل 2012 مهم بوده و درنتیجه SSMS2008 این ترتیب را تشخیص داده و رعایت میکند.
ولی SQLServer2012 پیشرفته تر شده و این ترتیب برایش مهم نیست در مقابل SSMS2012 خنگ تر شده و دیگر این ترتیب را تشخیص نمیدهد و در ساخت دستورات از آن پیروی نمیکند.
(((باید لزوم پشتیبانی این ترتیب در SSMS2012 جهت استفاده SQL در نسخه های پایین تر طی یک feedback به سایت مایکروسافت ، یادآوری شود ، باشد که ترتیب اثر بدهند یا برود بقل دست feedback های بی ثمر دیگر ...)))
=====
نقل قول:
آیا ساخت بانک هنگام اجرای برنامه مزیتی هم دارد؟
حداقل دو مزیت را همین الآن یادم می آید ...
مورد اول همین مشکل تاپیک است و توانایی ایجاد SQL با عدم وابستگی به نسخه خاص.
حتماً میدانید که فایل های mdf حتی به SP ها هم حساس هستند. مثلاً یعنی mdf نسخه 2005SP2 در 2005SP1 متصل نخواهد شد!
مورد بعدی هم برنامه نویسی تحت وب است ...
به دلایل متعدد از قیمت تا دانش، در حال حاضر اکثر سروهای سایت های فعلی، سرور های موسوم به Share است که فرد از یک شرکت هاستینگ فقط یک فضای وب با کنترل پنل و... میگیرید.
که مالک سایت هیچ راهی برای اتچ mdf خود ندارد.
هاستینگ فقط اجازه ایجاد یک دیتابیس خالی را به فرد میدهد با معمولاً یک پلتفرم تحت وب یا ریموت SSMS که فرد در هیچ کدام اجازه اتچ ندارد.
در واقع تنها راه فرد ساخت دستی تمام اشیا در سمت سرور است و یا اینکه یک اسکریپ SQL را اجرا کند.
درست به همین دلیل است که اگر شما فایل های اجرایی یک سایت (مثل YAF یا DNN و...) را دانلود کنید بجای mdf در پوشه نصب آنها فایل های sql را خواهید یافت.
(((
فقط کسانی که سرورهای VPS یا Dedicated دارند میتوانند فایل mdf را اتچ کنند حالا یا خودشان یا برنامه ای این کار را انجام دهد...
مگر انکه به مشتری گفته شود حتماً باید سرور اختصاصی تهیه کنید و User,Pass را هم به فروشنده بدهد (!!!) تا خودش برایش برنامه را نصب کنید ... !!!
همین اتفاق برای یکی از دوستانم که قصد خرید یک برنامه فروشگاه اینترنتی از شرکتی ایرانی را داشت افتاده بود !!!
اگر خودم تلفنی صحبت نکرده بودم، هنوز هم باورم نمیشد و میگفتم دوست من اشتباه شنیده و گفته و ...
یعنی واقعاً برنامه فروشگاه دو صفحه ای اینها پیچیده تر از DNN بوده؟! یا شاید هم جهالت اقتصادی و علمی شان متفاوت بوده!
بیخیال، غیبت کافی است!
)))
=====
موفق باشید.