2009-07-01 22 views
2

ストアドプロシージャには開発者のコ​​メントとヘッダーがあり、展開プロセスの一環として、これらを顧客のコピーから削除したいと考えています。 SQL Server 2005内または別のツールでこれを実現する方法はありますか?SQLコメントを削除

+0

...全体で他の誰かつまずく場合は、この[解答](http://stackoverflow.com/a/33947706/3606250)をご確認ください – drizin

答えて

1

あなたはこれをチェックすることもできます。

Remove Comments from SQL Server Stored Procedures

注:これは、SQL Serverで許可されている - で始まるコメントは処理しません。それ以外の場合は、開発者にストリームを介してテキストを読み込む短いフィルタアプリケーションを作成させてからコメントを削除してもらうことになります。または、自分で書きます。

0

プロシージャ定義をテキストまたは.sqlファイルに保存してからバージョン管理すると仮定します。 notepadd++のようなものを使用して、必要な文字列を検索/置換してから、プロダクション/顧客タグとしてコミットすることができます。これはエレガントではなく、オプションです。私はサードパーティのツールを知らず、私のGoogle検索は他のポスターが投稿したのと同じ結果を返しました。

2

「ローカルでコメントを解析する」オプションを持つWinSQL(非常に便利で、大いに推奨)と呼ばれるSQLツールを使用します。

個人的にはあまり使用しませんが、私のストアドプロシージャをビルドするスクリプトを実行するときに誤って実行してしまい、データベースのprocソースからそれらを削除してしまいました。 :-)

でも無料版にはそのオプションがあります。

2

これは適しているかどうかわかりませんが、WITH ENCRYPTIONオプションを使用するとコンテンツ全体を非表示にすることができます。エンドユーザーは手順のいずれかを見たり変更したりする必要がありますか?質問が尋ねられたとき

1

私はこのオプションは、C#の

2

に自分のSQL comment removerを書いてしまいましたができませんでしたが、SQL 2012年に、我々は今、私たちを助けるためにSQL Serverの独自のパーサーを使用することができます。 Removing Comments From SQL

0

hereのように、C#の正規表現を使用してコメントを削除できます。ブロックコメントがネストされていても、行コメント、ブロックコメントに有効で、リテラルまたは括弧で囲まれた名前付き識別子の中にあるコメント区切り文字を正しく識別して無視することができます。

1

少し遅れて相手にしかし

CREATE FUNCTION [usf_StripSQLComments] (@CommentedSQLCode VARCHAR(max)) 
RETURNS Varchar(max) 
/**************************************************************************************** 
--###################################################################################### 
-- [email protected] -- Some count sheep. Some code. Some write code to count sheep. 
--###################################################################################### 

--############################################################################# 
-- Sample Call Script 
--############################################################################# 
Declare @SqlCode Varchar(Max) 
Declare @objname varchar(max) = 'sp_myproc' 

select @Sqlcode = OBJECT_DEFINITION(t.OBJECT_ID) 
from sys.objects t 
where t.name = @objname 

select dbo.ssf_StripSQLComments(@Sqlcode) 
****************************************************************************************/ 
AS 
BEGIN 

    DECLARE @Sqlcode VARCHAR(MAX) [email protected] 

    Declare @i integer = 0 
    Declare @Char1 Char(1) 
    Declare @Char2 Char(1) 
    Declare @TrailingComment Char(1) = 'N' 
    Declare @UncommentedSQLCode varchar(Max)='' 
    Declare @Whackcounter Integer = 0 
    Declare @max Integer = DATALENGTH(@sqlcode) 
    While @i < @max 
    Begin 
     Select @Char1 = Substring(@Sqlcode,@i,1) 

     if @Char1 not in ('-', '/','''','*') 
     begin 
      if @Char1 = CHAR(13) or @Char1 = CHAR(10) 
       Select @TrailingComment = 'N' 
      Else if not (@Char1 = CHAR(32) or @Char1 = CHAR(9)) and @TrailingComment = 'N' -- Not Space or Tab 
        Select @TrailingComment = 'Y' 

      if @Whackcounter = 0 
       Select @UncommentedSQLCode += @Char1 
      select @i+=1 
     end 
     else 
     begin 
      Select @Char2 = @Char1 
      ,  @Char1 = Substring(@Sqlcode,@i+1,1) 
      If @Char1 = '-' and @Char2 = '-' and @Whackcounter = 0 
      Begin 
       While @i < @Max and Substring(@Sqlcode,@i,1) not in (char(13), char(10)) 
        Select @i+=1 

       if Substring(@Sqlcode,@i,1) = char(13) and @TrailingComment = 'N' 
        Select @i+=1 
       if Substring(@Sqlcode,@i,1) = char(10) and @TrailingComment = 'N' 
        Select @i+=1 
      End 
      else If @Char1 = '*' and @Char2 = '/' 
       Begin 
        Select @Whackcounter += 1 
        ,  @i += 2 
       End 
       else If @Char1 = '/' and @Char2 = '*' 
        Begin 
         Select @Whackcounter -= 1 

         ,  @i += 2 
        End 
        else if @char2 = '''' and @Whackcounter = 0 
         begin 
          Select @UncommentedSQLCode += @char2 
          while Substring(@Sqlcode,@i,1) <> '''' 
          Begin 
           Select @UncommentedSQLCode += Substring(@Sqlcode,@i,1) 
           ,  @i +=1 
          end 
          Select @i +=1 
          ,  @Char1 = Substring(@Sqlcode,@i,1) 
         end 
         else 
         Begin 
          if @Whackcounter = 0 
           Select @UncommentedSQLCode += @Char2 
          Select @i+=1 
         end 
     end 
    End 
    Return @UncommentedSQLCode 
END 
関連する問題