我正在尝试创建一个触发器,通过电子邮件发送插入查询的结果。表要求我创建json_value列,我正在努力在可执行文件的查询部分获得语法正确。
我通常是这样为json_value列编写查询的:
SELECT
json_value(property_dict,'$.level_1.level_2.description')
FROM [database].[dbo].[table]
当在可执行文件中像上面那样编写查询时,我在'$.'附近得到"语法不正确。
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MSSQLAlert',
@recipients = 'email@domain.com',
@subject = 'Test Email',
@query = 'SELECT TOP 1 json_value(jsoncolumn,'$.level_1.level_2.description')
FROM [database].[dbo].[table]',
@attach_query_result_as_file = 0
如果我不包括$和描述之外的引号,我得到"初始化sqlcmd库失败,错误编号为-2147467259.">
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MSSQLAlert',
@recipients = 'email@domain.com',
@subject = 'Test Email',
@query = 'SELECT TOP 1 json_value(jsoncolumn,$.level_1.level_2.description)
FROM [database].[dbo].[table]',
@attach_query_result_as_file = 0
我想做的是可能的吗?谢谢你的帮助!
由于您的查询包含在作为参数值传递的字符串值中,因此您只需要在查询中转义单引号。试试这个:
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MSSQLAlert',
@recipients = 'email@domain.com',
@subject = 'Test Email',
@query = 'SELECT TOP 1 json_value(jsoncolumn,''$.level_1.level_2.description'')
FROM SomeTable',
@attach_query_result_as_file = 0;