[SQL Server] 「StoredProcedure ‘dbo.pGetData’のスクリプトに失敗しました。」対応方

inno
2015-07-10 11:23 1704 0
MS-SQL / SQL Server
「StoredProcedure ‘dbo.pGetData’のスクリプトに失敗しました。」対応方

SP内容を変更使用とした時こんなエラーメッセージーが出る場合があります。
えっ?
重要なSPなのに変更できない!!!



■エラー内容
StoredProcedure ‘dbo.pGetData’のスクリプトに失敗しました。(Microsoft.SqlServer.Smo)
追加情報:
StoredProcedure ‘pGetData’のTextHeaaderの構文エラー。(Microsoft.SqlServer.Smo)

この問題について原因と対応法について説明したいと思います。
対応法が分かっても原因が理解しないとまたSP変更ができなくなりますので、
まず、原因からみてみましょう。

■原因
まず、テストの為にSPを作成してみます。
下記のSQLを使ってテスト用のSPを作成してみましょう。

/*

■作成者:INNO
■作成日:-01-01
■説明:データ取得
■使用例:

EXEC dbo.pGetData @Idx = 1


■参照オブジェクト
SELECT TOP 10 * FROM dbo.TempData

*/

CREATE PROCEDURE [dbo].[pGetData]
@Idx int
AS
SET NOCOUNT ON

SELECT * FROM dbo.TempData WHERE Idx = @Idx

実行すると正常に作成され、変更も問題なくできます。
では、下記のSQLを利用してSPを修正してみましょう。

/*

■作成者:INNO
■作成日:-01-01
■説明:データ取得
■使用例:

EXEC dbo.pGetData @Idx = 1


/*
これはだめ!
*/

■参照オブジェクト
SELECT TOP 10 * FROM dbo.TempData

*/

ALTER PROCEDURE [dbo].[pGetData]
@Idx int
AS
SET NOCOUNT ON

SELECT * FROM dbo.TempData WHERE Idx = @Idx

それでは、修正したこのSQLを変更してみましょう!
どうですか?
SPが開きますか?
できないでしょう?
このエラーメッセージが表示されますよね。



StoredProcedure ‘dbo.pGetData’のスクリプトに失敗しました。(Microsoft.SqlServer.Smo)
追加情報:
StoredProcedure ‘pGetData’のTextHeaaderの構文エラー。(Microsoft.SqlServer.Smo)

SPを作成する時は上記のSQLのようにコメントアウト【 /* */ 】をする方が多いと思います。
コメントアウトの中にまたコメントアウトをしている部分が見えますか?
コメントアウトの中にまたコメントアウトをしても実際は問題はないのですが、
その次にある「SELECT」文の「*」がだめなんですよ。
ですので、一番いい方法はコメントアウトの中にまたコメントアウトをしなければ一番いいのです!!

■対応法
では、SPの内容が見れなくなったこの問題!
解決するには下記のSQLを使います。

SELECT A.name, B.definition
FROM sys.objects AS A JOIN sys.sql_modules AS B
ON A.object_id = B.object_id
WHERE A.name = 'pGetData'

開かないSP名で検索します。
そうすると実行結果は下記のように表示されます。



definition」カラムの内容がSP内容ですので、カラムの内容をコピーして使えます。
その後また修正する時はコメントアウトの中にあるコメントアウトは削除してから修正してください。

コメント