4

重複の可能性:
TSQL ユーザー定義関数で PRINT をどのように出力しますか?

これは私を夢中にさせています。

デバッグしようとしている関数がありますが、テーブルに挿入したり、print ステートメントを実行したり、エラーを発生させることさえできません。

SQL はメッセージを返します

関数内での副作用演算子「PRINT」の使用は無効です。

これをデバッグするにはどうすればよいですか。実行中の変数の値を知りたいだけですか?

4

2 に答える 2

4

試す:

DECLARE @ExecuteString   varchar(500)
       ,@Yourtext        varchar(500)

@ExecuteString = 'echo  '+@Yourtext+' > yourfile.txt)

exec master..xp_cmdshell @ExecuteString, no_output

使用: ">" を使用してファイルを作成/上書きし、">>" を使用してファイルを作成/追加します。文字REPLACE(@Yourtext,'&','^&')をエスケープするために使用する必要があるかもしれません&

于 2012-05-23T14:23:50.337 に答える
3

関数が文字列を返す場合、いつでも return を差し込むことができます。

ALTER FUNCTION dbo.whatever()
RETURNS NVARCHAR(128)
AS
BEGIN
  DECLARE @foo VARCHAR(128);

  SELECT TOP (1) @foo = name FROM sys.objects ORDER BY NEWID();

  -- temporary debug:
  RETURN (@foo);

  ... continue with function
END
GO

変数が数値または日付の場合、RTRIM() または CONVERT() を使用して、最初に文字列に安全に変換できます。

テーブル値関数で同様のことを行うことができます。出力したいデバッグ メッセージや変数を配置できる列を追加するだけです。

于 2012-05-23T14:20:59.657 に答える