1

@クエリから変数を送信しようとすると問題が発生します。この変数はトリガーによって送信されます。変数はプロシージャ、印刷、および送信内容の表示に適しています。この変数を次のように取得しようとすると問題が発生します。変数を取るのではなく、書いたものの値を取るだけを選択します。

テキストを書くだけなら、メールは問題なく正常に機能しています。また、通常のクエリからデータを取得しますが、変数を含めると失敗します。

変数をselectに入れることを選択したので、'+ @ q +'で、エラーが表示されます

メッセージ102、レベル15、状態1、プロシージャFacturacion_Tope、29行目
'+'の近くの構文が正しくありません。

一重引用符を削除し+、固定値および変数ではありません

USE [sistemas]
GO
/****** Object:  StoredProcedure [dbo].[Facturacion_Tope]    Script Date: 11/15/2012 07:32:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Facturacion_Tope]
    @ENVIO INT 
AS
print @ENVIO
BEGIN

    SET NOCOUNT ON;
    Declare @q INT
    --here shows the value of consultation 
    print @ENVIO

    set @q = (select OID from sistemas..DATFACTUR_DINAMICA WHERE OID = @ENVIO)

    --here shows the value of consultation
    print @q

    EXEC msdb.dbo.sp_send_dbmail
      @profile_name = 'correo_sistemas',
      @recipients = 'diegom_montes_contratista@clinica.com.co',
      -- @execute_query_database = 'sistemas',
      @query = 'select * from sistemas..DATFACTUR_DINAMICA WHERE OID = "@q"',                       
      @query_attachment_filename = 'Consulta.txt',      
      -- @body = 'Caida en: '@query+'', 
      @body_format = 'HTML',
      @subject = 'Numero de factura';
END

これは、ストアドプロシージャの出力です。

209 --prints well
209 --prints well
HAY VA --prints well
209 --prints well
Msg 22050、Level 16、State 1、Line 0
クエリのフォーマットエラー、おそらく無効なパラメーター
504行目のDoomed Error 14661、クエリの実行に失敗しました:Msg 137、レベル15、状態2、サーバーCDPALWIN01 \ CDPALSQL02、1行目
スカラー変数「@q」を宣言する必要があります。
メッセージ3903、レベル16、状態1、プロシージャDEVDATFAC、行180
ROLLBACK TRANSACTION要求には、対応するBEGINTRANSACTIONがありません。
ステートメントは終了されました。

4

2 に答える 2

3

事前に @query パラメーターを設定し、プロシージャーのパラメーター割り当てで文字列を連結するのではなく、単純な変数として使用します。

 DECLARE @thequery nvarchar(max) = 'select * from sistemas..DATFACTUR_DINAMICA
                                    WHERE OID = ' + cast(@q as nvarchar(max));
 EXEC msdb.dbo.sp_send_dbmail
 @profile_name = 'correo_sistemas',
    @recipients = 'diegom_montes_contratista@clinica.com.co',
   -- @execute_query_database = 'sistemas',
    @query = @thequery,                     
    @query_attachment_filename = 'Consulta.txt',      
  -- @body = 'Caida en: '@query+'', 
   @body_format = 'HTML',
    @subject = 'Numero de factura';
于 2012-11-15T13:19:26.897 に答える