Does SQL Server database compatibility level negate SQL Server version compatibility - sql

For instance I have an application that says it supports SQL Server 2005 to SQL Server 2008. If I transfer that database to a SQL Server 2017 machine and set the compatibility mode to 2008, should it behave just the same as if it were really on a SQL Server 2008 box? I know that the compatibility mode does limit the feature set and behaviors to what would be present in SQL Server 2008. So part of me thinks this should work just fine. But another part of me wonders if there may be others things that I am not considering that could potentially be an issue. Does anyone have any experience where this has come back to bite you?

"Upgrade the database to a SQL 2017 server and set the compatibility
mode to 2008 should it behave just the same as if it were really on a
SQL 2008 server"
Yes this is correct.
This also happens to be Microsoft's recommended upgrade process. As per Microsoft, upgrade to the latest version off SQL Server but keep the source database compatability level.
If a full database backup was taken on a older version of SQL server but restore was done on a new version, then the database compatability level is the same as old version unless its not supported on new version. In that case the database compatability level will switch to the lowest supported.
More here and here

Related

SQL Server 2000 database after restore to 2005 is empty

I have very old backup file (.bak) of SQL Server 2000. After restoring it to SQL Server 2005, the database looks empty (please see screenshot).
What is the probable cause?
screenshot
Answer for other people looking for solution:
It turns out that the database was even older than SQL2000. It was from SQL 6.5 (1996).
From previous screenshot 6.5 means database compatibility version 65 (SQL Server version 6.5. All versions described here:
https://en.wikipedia.org/wiki/History_of_Microsoft_SQL_Server
So I had to open SQL Enterprise manager 8.0 (which supports such an old database, version 65) and change compatibility level of the database to 80 (highest available, and that's compatibility version of SQL 2000). Than make a backup of DB and restore it in SQL Server 2000-2008 as lvl 80 is supported by them. Please see screenshot below:
Compatibility lvl
And you can repeat the steps so for example DB restored in SQL Server 2008 can be changed (compatibility lvl) to a 100. Back it up again and restore in SQL 2017 or higher, you can easily find compatibility level tables:
MICROSOFT WEBSITE COMPATIBILITY LEVEL

Conversion from LocalDB (.mdf) file to SQL Server Express .mdf file and reverse process

Since we need to move around our database a lot (like update it with new Rows which are generated by code and then update it prod db and reverse process). SQL Server CE, being a file based system was very helpful.
We would like to upgrade to use SQL Server Local Db but at the same time, it has limitations of use with IIS (though possible with AttacheDbFile). In this regard, since LocalDb is more or less a version of SQL Server Express, would it be possible to use our SQL Server LocalDB .mdf in our development environment and then copy them in prod but use by attaching to a SQL Server Express instance?
If yes, what additional thing, we need to do make it possible?
Also, we would like the reverse process to be worked out as well, mean detach the .mdf file and use it as LocalDb in development environment. I have read the great blog articles of
Krzysztof Kozielczyk also but not have experimented much with LocalDb.
LocalDB IS SQL Server Express (introduced with SQL Server 2012 Express), and the .mdf file is identical between LocalDB and SQL Server Express (and even a "full" SQL Server edition like Web, Standard or Enterprise Edition).
The only caveat is: you need to be using the same versions of those databases, since the file format is only identical amongst same versions, and can only be used amongst the same versions (e.g. 2012) - or it can be "upgraded" to the next newer version (e.g. you could move a database from LocalDB 2012 to a SQL Server 2014 Express once it's released) - but you can never go back down to an earlier version (you cannot take a LocalDB 2012 .mdf database file and attach it to a SQL Server 2008 version).

How to automatically restore a SQL Server 2008 R2 backup file

My team needs to update an automated content process running over SQL Server 2008 servers to include the content of a SQL Server 2008 R2 database delivered by a third-party vendor.
The request to third-party to deliver us on SQL Server 2008 is NOT an option.
My common sense indicates there is no way to downgrade from 2k8 R2 to 2k8 as in most of the software products I know. However, I'm wondering if I would be able to do something like this in a script:
Restore SQL Server 2008 R2 .bak file onto our SQL Server 2008 R2 instance
Update compatiblity level to SQL Server 2008 (100). Here is the bug in my plan: I've not found any compatiblity level distinctions between 2008 versions in internet. Any clue on this?
Backup the database.
Restore the database in SQL Server 2008
There may be some other ideas you may want to share with me.
Just recall there should not be manual intervention on this database conversion since this operation needs to be incorporated to an automated process.
Any help/suggestions/comments will be welcome!
No, you cannot restore a database backwards, regardless of compatibility level. Compatibility level affects certain database engine behaviors, but does not downgrade the database version. You will never be able to restore onto 2008 a database that ever existed in a 2008 R2 instance.
For workarounds, you can:
restore the database on R2, then use the import/export data wizard (or a third party tool) to transfer schema / data to the 2008 instance (and you should be able to automate this to some extent, e.g. Red-Gate's tools have command-line interfaces)
upgrade your 2008 servers to 2008 R2 or 2012
push back on the vendor
By design, you can only restore a DB backup to the same or newer version of SQL Server. A backup created with SQL Server 2008 R2 can only be restored with SQL Server 2008 R2 or SQL Server 2012. This is regardless of the compatibility level of the database. It's a limitation of the backup and restore procedures. This has been a limitation since prior to SQL Server 2000 (i.e., every version I've ever used).
Maybe you can script out the creation of new database, instead of backing up and restoring you basically just do a data dump with script.
Try looking at this How can I get a SQL dump of a SQL Server 2008 database?

Error: Can't attach DB to SQL Server 2012

I have SQL Server 2012 and I'm trying to attach a db which was previously used with SQL Server 2012, surprisingly I'm getting the following error:
The database 'DatabaseName' cannot be opened because it is version
706. This server supports version 622 and earlier. A downgrade path is not supported.
I don't really understand how this could happen since like I said it was used with same 2012 version. What am I doing wrong? How can I make it work? Please explain in detail how this can be resolved.
Thank you!!
The error sounds like the server you are trying to attach the database to is not SQL Server 2012. This may be the version of Management Studio / Management Studio Express you're using, but I suspect SELECT ##VERSION; will tell you something different. It may just be a connection string mixup if you have multiple instances of SQL Server installed, otherwise you should download and install SQL Server 2012 Express from here.
#source
It sounds like you had the following configuration and source databases:
SQL Server 2008 SP3 (ver 10.0...) - database engine
SQL Server Management Studio 2012 (ver 11.0...) - management tools
a database that was created with SQL Server 2012 (version 706)
As mentioned you could install SSMS for SQL Server 2008 (after you uninstall SSMS for SQL Server 2012). Then you would have to script your database for that version and re-run the script via 'Tasks>Script...', remembering to set the target server version as shown below.
After scripting you can then use the import/export wizard to export and then inport the data into the new (downgraded database), assuming the database had no 2012-only datatypes (such as sequences).
Another consideration is database compatibility level as shown below. You can have a SQL Server 2012 instance which hosts databases with various compatibility levels.
Using SELECT ##VERSION works very well for me. Your Database Engine is connected to a 2008 DB which certainly doesn't allow you to attach. Once I change my Database Engine to connect to 2012 DB, it works for me.
Check your Database Engine connection. You can be working on 2012 Management Studio yet connecting to 2008 DB. This is what happened to me and I have solved it use SELECT ##VERSION.

Will SQL Server Express work with a database made in regular SQL Server?

I was wondering if we could backup the database that we currently host on regular SQL Server, and put it onto our clients computer when we setup SQL Server Express for them.
Is this possible?
Thanks,
Matt
Yes, it's possible to restore a database backup from the Standard edition to the Express edition. It's not possible to restore a SQL Server 2008 to a SQL Server 2005 version, though.
However, there a some minor differences between versions. I've noticed an issue in SQL Server Express 2005 when calling .NET SQL CLR functions across databases, so your mileage may vary. I haven't been able to find a good overview of the exact differences between the various SQL Server editions.
It's always best to keep the development platform as close as possible to the release platform. I can only recommend that you use the Express edition of SQL Server for development as well; and re-test your application.