2016-10-31 6 views
2

ログファイルにテキストを書き込むためのストアドプロシージャを作成しました。私はこのようにそれを呼び出すと簡単なストアドプロシージャを呼び出してテキストログファイルを作成するときのエラー

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[WriteTextFileLog] 
    @TextForLog nvarchar(MAX) 
AS 
    DECLARE @CMDTEXT as nvarchar(255) 

    SELECT @CMDTEXT = 'echo ' + @TextForLog + ' >> "\\pathtotextfile\LogFile.txt"' 

    EXEC master..xp_cmdshell @CMDTEXT; 

MYDATABASE.dbo.writetextfilelog @TextForLog = CONVERT(varchar(23), GETDATE, 121) 

私はこのエラーを取得する:

Incorrect syntax near the keyword 'CONVERT'

私が何かを明らかに不足しているしなければならない...任意のアイデア?

+2

'GETDATE'の後に行方不明()があります。 'GETDATE()' – scsimon

+1

また、 'EXEC'コマンドは式などが好きではありません。あなたは' EXEC'呼び出しの前に 'CONVERT'を実行し、その結果を変数に格納してから'EXEC' - コールで何の表現や計算も無しに... –

+0

ありがとうSCSIMON、私はそれをキャッチしました... MARC、私はあなたが正しいかもしれないと思っていますが、私はその問題をコードしています... MTB.dbo.writetextfilelog @TextForLog = "blah blah test" + CONVERT(varchar(23)、GETDATE()、121) これはそうするだろうと思ったが、明らかにそうではない –

答えて

1

@marc_sはコメントの中で、EXECUTEはパラメータ値として式を受け入れず、プレーン定数の文字列または変数またはDEFAULTキーワードのみを受け入れます。ここで

は、ストアドプロシージャを呼び出すためのコマンドの構文は次のとおりです。

ので
[ { EXEC | EXECUTE } ] 
    { 
     [ @return_status = ] 
     { module_name [ ;number ] | @module_name_var } 
     [ [ @parameter = ] { value 
          | @variable [ OUTPUT ] 
          | [ DEFAULT ] 
          } 
     ] 
     [ ,...n ] 
     [ WITH <execute_option> [ ,...n ] ] 
    } 
[;] 

、変数にあらかじめパラメータの値を準備します

DECLARE @VarText nvarchar(max); 
SET @VarText = N'Blah blah test ' + CONVERT(varchar(23), GETDATE(), 121); 
EXEC MYDATABASE.dbo.writetextfilelog @TextForLog = @VarText; 

私が使用することをお勧めいたしますたいですnvarchar(max)は控えめに、実際に4000文字以上必要な場合にのみ使用してください。それ以外の場合は、nvarchar(255)のような賢明な制限を使用してください。

+0

それは完璧にそれを説明していますウラジミール、作品素晴らしい、あなたの助けを大変ありがとう!私の脳が詰まった! :-D –

関連する問題