尝试在向我发送电子邮件的表格上创建触发器时出现以下错误:
当未使用EXISTS
引入子查询时,只能在选择列表中指定一个表达式
基本上我所做的是:
set @stu = (select name, year, gender from studentinformation where id = @id)
set @bod = ' Details changed for ' + @stu
Exec msdb.dbo.sp_send_dbmail @body = @bod;
我刚刚展示了我认为会遇到问题的部分代码。我觉得放括号是让SQL觉得它是一个子查询?这是什么原因?但是,如何通过电子邮件通过触发器发送查询结果? select语句引用另一个表而不是触发器所基于的表
答案 0 :(得分:0)
您应该在@query
sp_send_dbmail
参数中指定您的查询
exec sp_send_dbmail
@query = 'select name,year,gender from studentinformation where id = 1234',
... -- some other parameters
有关更多详细信息,请参阅sp_send_dbmail上的文档 https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql?view=sql-server-2017
答案 1 :(得分:0)
@stu中只能有1个值。你试图用名字,年份和性别来填充它。 我建议您使用DECLARE作为其他值,例如
DECLARE @stu varchar(100)
DECLARE @MyYear INT
DECLARE @MyGender varchar(10)
set @stu = (select name from studentinformation where id=@id)
set @MyYear = (select Year from studentinformation where id = @id)
set @MyGender = (select gender from studentinformation where id = @id)