1

我在尝试从 @ 查询发送变量时遇到问题,该变量由触发器发送,该变量与程序配合得很好,打印并显示我发送的内容,当我尝试将该变量发送到选择不是我取变量,只取我写的值。

如果您只写文本,邮件可以正常工作。我也从普通查询中获取数据,但如果我包含变量失败。

我选择将变量放在 select so '+ @ 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 行注定错误 14661,查询执行失败:Msg 137, Level 15, State 2, Server CDPALWIN01\CDPALSQL02, Line 1
必须声明标量变量“@q”。
消息 3903,级别 16,状态 1,过程 DEVDATFAC,第 180 行
ROLLBACK TRANSACTION 请求没有相应的 BEGIN TRANSACTION。
该语句已终止。

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 回答
-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)) + ''''
于 2017-10-18T18:09:00.903 回答