2

SQL Server 2005で開発を行う必要があるプロジェクトがありますが、SQLServer2000ボックスへの展開を行います。

SQLコードの99%については、問題はありません。すべてが下位互換性があるように見えます。

これで、すべてのストアドプロシージャ(SP)をソース管理に追加し始めようとしています。クエリが実行されるたびにドロップアドを実行するというアイデアが気に入っています。IE SPがすでに存在する場合は、最初にドロップします。次に、SPを作成/再作成します。

SQL2000とSQL2005の両方と互換性のある方法で、単一のスクリプトでこれを実行して、スクリプトが開発(2000)および本番(2005)でのみ機能するようにするにはどうすればよいですか?構文は少し異なり、SPメタデータは異なるシステムテーブルに格納されていると思います。

動作するSQLスクリプトを支援してください。

4

8 に答える 8

4

これはSQL2000とSQL2005の両方で機能します。私は今それをテストしました。

USE databasename
GO

IF object_id('schema.StoredProcedureName') IS NOT NULL
DROP PROCEDURE schema.StoredProcedureName
GO

CREATE PROCEDURE schema.StoredProcedureName
.. your code
于 2010-08-09T08:16:57.493 に答える
3

システムテーブルを使用しないでください:OBJECT_IDを使用してください

また、ALTERを使用してデプロイしますが、CREATEを使用してソース管理を維持します。つまり、(ALTERを使用して)差分展開スクリプトのみを使用しますが、リリース後のソース管理フォルダー(CREATEとして)と比較します。

私はコード履歴とより単純な展開の両方を持っています:すべてのprocをドロップ/作成する必要はありません。たとえば、許可を忘れた場合はどうなりますか?

Red Gate /SVNBTWを使用しています

于 2010-08-02T14:18:31.477 に答える
2

は思う

 IF OBJECT_ID('your_sp_name') IS NOT NULL

私は2000年に月にテストすることはできませんが、それがそこにあるかどうかを教えてくれます...

于 2010-07-30T08:10:00.577 に答える
1

FWIW

select * from sysobjects where type = 'p'

SQL 2008でも引き続き機能するため、これは最小公分母として引き続き許容できると推測しています。DMVは2000年には利用できませんでした。

于 2010-07-30T08:07:41.093 に答える
1

最適なオプションは、互換性ビュー、、sysobectsなどsyscolumnsを停止することです

次のリンクを確認して くださいhttp://msdn.microsoft.com/en-us/library/ms187376.aspx

SQL Serverの以前のリリースのシステムテーブルの多くは、ビューのセットとして実装されるようになりました。これらのビューは互換性ビューと呼ばれ、下位互換性のみを目的としています。互換性ビューは、SQLServer2000で使用可能だったものと同じメタデータを公開します。

于 2010-07-30T08:11:14.690 に答える
1

sys.sp_refreshsqlmodule私の古い回答に記載されているように、すべてのストアドプロシージャを再作成しているように見えます。私は、T-SQLストアドプロシージャを検証するための信頼できる方法を探しています。誰か持ってる?。STORED PROCEDUREのコードは、依存関係を含めてもう一度検証されます。

于 2010-08-02T11:12:31.177 に答える
0

INFORMATION_SCHEMA.ROUTINESビューの使用は、SQL Server 2000、2005、および2008で機能するはずです。唯一の欠点は、ビューがオブジェクトのスキーマを決定するための実行可能な手段ではなくなったことです。

ただし、それが問題にならない場合は、次のようなスクリプトを試してください。

USE YourDB
GO

IF EXISTS (
  SELECT * 
  FROM INFORMATION_SCHEMA.ROUTINES 
  WHERE ROUTINE_NAME = 'usp_test'
) DROP PROCEDURE usp_test
GO

CREATE PROCEDURE usp_test AS
SELECT 1 AS val
GO

EXEC usp_test
GO
于 2010-08-04T05:12:27.347 に答える
0

ほとんどの場合、2005ボックスでSQL2000 TSQLを実行しようとします。これは、ほとんど下位互換性があると予想されるためです。そうは言っても、新しいTSQLを使用できるように、本番ボックスのアップグレードを完了する必要があります。

バージョン間の互換性が見つからない場合は、最初にバージョンを検出できます。

実行中のSQLServer2000/2005のバージョンを確認するには、クエリアナライザーを使用してSQL Server 2000/2005に接続し、次のコードを実行します。

   SELECT 
      SERVERPROPERTY('productversion'), 
      SERVERPROPERTY ('productlevel'), 
      SERVERPROPERTY ('edition')

結果は次のとおりです。製品バージョン(たとえば、8.00.534)。製品レベル(たとえば、「RTM」または「SP2」)。エディション(たとえば、「StandardEdition」)。

たとえば、結果は次のようになります。8.00.534 RTM Standard Edition


ソース: http: //blog.sqlauthority.com/2007/03/07/sql-server-script-to-determine-which-version-of-sql-server-2000-2005-is-running/


バージョンを決定したら、適切なレベルのコードを実行できます。

于 2010-08-05T16:11:33.960 に答える