20

私は SQL サーバー 2012 を使用SP_HELPTEXTしており、以前に作成したストアド プロシージャを取得するために常に使用しています。以前のバージョンの SQL サーバーでは、このプロセスに問題はありませんでしたが、2012 年には、私のストアド プロシージャには余分な行が含まれています。私が書いた

Create proc SP_Test
as
begin
 Select * 
 from table_ABC
end

SP_HELPTEXTこの手順(または他の手順)で使用した後、この出力が得られます

Create proc SP_Test

as

begin

 Select * 

 from table_ABC

end

他の誰かもこの問題に直面していますか、それともこの地球上でこの問題に苦しんでいるのは私だけですか?? この問題を解決する方法を知っている人はいますか??

私のSQLサーバーの構成は次のとおりです(Help -> Aboutからコピー)

Microsoft SQL Server Management Studio          11.0.2100.60
Microsoft Analysis Services Client Tools        11.0.2100.60
Microsoft Data Access Components (MDAC)         6.1.7601.17514
Microsoft MSXML                     3.0 6.0 
Microsoft Internet Explorer             9.0.8112.16421
Microsoft .NET Framework                4.0.30319.269
Operating System                    6.1.7601

事前にサンクス。

4

8 に答える 8

24

sp_helptextsetを使用して実行しResults to grid、グリッドから結果をコピーして新しいクエリまたはその他のテキストエディタに貼り付けると、この動作を再現できます。

sp_helptextこの効果は標準のグリッド結果セットでは表示されないため、これは以前のエディションからの動作の変更のようです。

最も簡単な回避策はsp_helptextResults to textset(Query- Results to>> Results to text、shortcut CTRL+ )を使用して実行することTです。

Results to text期待する出力を得るには、1行あたりの最大文字数を増やす必要がある場合があります- Tools>>> - 「各列に表示される最大文字数」を最大値8192に設定します。OptionsQuery ResultsResults to text

于 2012-06-16T10:06:46.997 に答える
6

私の意見では、(Results to text を使用する場合と比較して) より良い回避策は、ここで説明されているように sp_helptext2 ストアド プロシージャを作成することです。

http://sql-javier-villegas.blogspot.com/2012/08/a-workaround-for-sphelptext-bug-in-ssms.html

注:最後に新しい行がない場合、そのソリューションには最後の行を除外するバグがあります。修正された T-SQL:

CREATE PROCEDURE [dbo].[sp_helptext2] (@ProcName NVARCHAR(256))
AS
BEGIN
  DECLARE @PROC_TABLE TABLE (X1  NVARCHAR(MAX))

  DECLARE @Proc NVARCHAR(MAX)
  DECLARE @Procedure NVARCHAR(MAX)
  DECLARE @ProcLines TABLE (PLID INT IDENTITY(1,1), Line NVARCHAR(MAX))

  SELECT @Procedure = 'SELECT DEFINITION FROM '+db_name()+'.SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('''+@ProcName+''')'

  insert into @PROC_TABLE (X1)
        exec  (@Procedure)

  SELECT @Proc=X1 from @PROC_TABLE

  WHILE CHARINDEX(CHAR(13)+CHAR(10),@Proc) > 0
  BEGIN
        INSERT @ProcLines
        SELECT LEFT(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)-1)
        SELECT @Proc = SUBSTRING(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)+2,LEN(@Proc))
  END
  --* inserts last line
  insert @ProcLines 
  select @Proc ;

  SELECT Line FROM @ProcLines ORDER BY PLID
END
于 2012-11-01T14:55:28.830 に答える
-1

私もこの問題に直面しました。

以下は、問題を解決するために使用した手順です(一時的な修正のみに注意してください)

1)クエリを選択

2)次に、右クリックしてクエリ デザイナーで開きます。

3) [OK] をクリックします。

余分なスペースがすべて削除されていることに気付くでしょう。

注:これは、プロシージャなどではなく、単純なクエリに対してのみ機能します

于 2014-06-17T05:23:03.507 に答える