如何在sp_send_dbmail的查询中使用变量?

时间:2012-11-15 13:15:28

标签: sql sql-server-2008

我在尝试从@查询发送变量时遇到问题,这个变量是由触发器发送的,变量与程序一致,打印并显示我发送的内容,当我尝试采取时出现问题要选择的变量我不接受变量,只需取我写的值。

如果您只撰写文字,邮件工作正常没有问题。我也从正常查询中获取数据,但如果我包含变量失败。

我选择将变量放在select中,所以'+ @ q +'并显示错误

  

Msg 102,Level 15,State 1,Procedure 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 - 打印得很好   209 - 打印良好
  HAY VA - 打印得很好   209 - 印刷良好
  Msg 22050,Level 16,State 1,Line 0
  格式化查询时出错,可能是无效参数
  第504行注定错误14661,查询执行失败:消息137,级别15,状态2,服务器CDPALWIN01 \ CDPALSQL02,行1   必须声明标量变量“@q”   消息3903,级别16,状态1,过程DEVDATFAC,行180   ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION   声明已经终止。

2 个答案:

答案 0 :(得分:1)

预先设置@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';

答案 1 :(得分:-1)

使用单引号将变量打印为静态值。

declare @s_dt nvarchar(max)

set @s_dt = 'select * from database.dbo.table_name where col_name = ''' + CAST(cast(getdate() as DATE) as nvarchar(max)) + ''''