1

MS SQL Server Management Studio 2005 の場合:

Tools|Options|Scripting|"Include IF NOT EXISTS clause" を true に設定している場合、ストアド プロシージャを変更すると、機能しない奇妙なスクリプトが作成されます。次のようになります: (簡潔にするために省略記号を使用)

 SET QUOTED_IDENTIFIER ON
 GO
 IF NOT EXISTS [...]
 BEGIN
 EXEC dbo.sp_executesql @statement = N'
 ALTER procedure [dbo].[p_Procedure]
 [...]
 '
 END

ALTER ステートメントが呼び出される唯一の方法は、ストアド プロシージャが存在しない場合であるため、これは明らかに機能しません。

したがって、問題は次のとおりです。この生成されたコードを変更する方法はありますか? テンプレートはどこかにありますか (これはテンプレート ツールでのビルドとは関係ないようです)。

(この動作の簡単な説明: CREATE ステートメントのスクリプトを作成すると、IF NOT EXISTS がより意味のある同じコードが生成されます)

4

1 に答える 1

0

MS フィードバック サイトには、このトピックに関するいくつかの問題があります。ここに1つがあります:

https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260519

その問題に関する 1 つのコメントを次に示します (上記のリンク先のページの下部から)。

SQL2000 では、アプローチは If exists, DROP に続いて CREATE でした。これは完璧に機能し、すべてのケースをカバーしました。このスクリプト モデルを基に展開を構築したので、とても使いやすかったです。SQl2005 が登場して以来、SQL2000 への移行で失われた自動化されたスクリプトを置き換える手動の面倒な回避策がありました。

存在する場合は、DROP に続いて CREATE アプローチを再実行してください。道は素晴らしかった

于 2008-12-16T23:15:02.493 に答える