こんにちは、MSSQLSERVER 2000、2005、2008、および 2008R2 を使用しています。
私は 2000 で SP を作成し、それを上位バージョンで実行したいと考えていました。逆もまた同様で、2008 で SP を作成したとします (上位バージョンで作成された SP を意味します)。 SP または SP 内の同じコードが異なるバージョンで使用されるようにする必要がありますか? 誰でもこれについて私を助けてくれませんか....
こんにちは、MSSQLSERVER 2000、2005、2008、および 2008R2 を使用しています。
私は 2000 で SP を作成し、それを上位バージョンで実行したいと考えていました。逆もまた同様で、2008 で SP を作成したとします (上位バージョンで作成された SP を意味します)。 SP または SP 内の同じコードが異なるバージョンで使用されるようにする必要がありますか? 誰でもこれについて私を助けてくれませんか....
「2008年にSPを作成し、それより前のバージョンで実行したかった」とは、2008年に手順のコードをコピーし、2000年に再作成することを意味すると思います.
その場合、プロシージャ内にある T-SQL コードによって異なります。2000 が行うすべての処理を行う proc が 2008 にある場合、両方のバージョンで動作します。ただし、たとえば 2008 で CTE を実行する手順がある場合、そのバージョンでは CTE がサポートされていないため、2000 では機能しません。
このリンクは、違いを示すドキュメントをダウンロードします
まず、CTE やテーブル変数を使用しないでください。
SQL 2005+ は、セミコロンに関してもう少しペダンティック/準拠しているため、そこに記述した場合、SQL 2000 で実行する必要があります。
いくつかのリストについては、SQL Server 2005 の新しい t-sql 機能とは?も参照してください。
経験からの警告: Microsoft は、SQL 2005 以降のパフォーマンスのためにクエリ セマンティクスを変更することを認めています。Microsoft による 6/17/08 11:34AM の応答を参照してください: http://connect.microsoft.com/SQLServer/feedback/details/350485/bug-with-newid-and-table-expressions
たとえば、SQL 2000 で有効な日付のリストを返すサブクエリを作成しました。
Select dates.Date, *
From (
Select Cast(y + '-' + m + '-' + d1 + d2 As smalldatetime) [date]
From (Select '2007' y Union Select '2008') y,
(Select '01' m Union Select '02' Union Select '03' Union Select '04' Union Select '05'Union Select '06' Union Select '07' Union Select '08' Union Select '09' Union Select '10' Union Select '11' Union Select '12') m,
(Select '0' d1 Union Select '1' Union Select '2' Union Select '3') d1,
(Select '0' d2 Union Select '1' Union Select '2' Union Select '3' Union Select '4' Union Select '5' Union Select '6' Union Select '7' Union Select '8' Union Select '9') d2
Where IsDate(y + '-' + m + '-' + d1 + d2) = 1
) dates
これをサブクエリとして使用して、日付がまばらなテーブルに結合し、カレンダーを作成できるようにしました。理想的ではありませんが、この場合は「日付」テーブルを作成したくなかったので、うまくいきました。
SQL Server 2005 に切り替えたとき、Cast(as smalldatetime) の後に "Where IsDate" を最適化することにしました。これは、日付ではないものをキャストしようとして、エラーが返されたことを意味します。サブクエリをさらにネストして、Cast が IsDate を使用してクエリの外側にあるようにしたと思いますが、それでも失敗しました。解決策は、サブクエリの結果を使用して一時テーブルまたはテーブル変数を作成し、それをスパース テーブルに結合することでした。