我在尝试从@查询发送变量时遇到问题,这个变量是由触发器发送的,变量与程序一致,打印并显示我发送的内容,当我尝试采取时出现问题要选择的变量我不接受变量,只需取我写的值。
如果您只撰写文字,邮件工作正常没有问题。我也从正常查询中获取数据,但如果我包含变量失败。
我选择将变量放在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 声明已经终止。
答案 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)) + ''''