SQL Server:触发器

时间:2018-05-15 23:54:54

标签: sql sql-server sql-server-2012 triggers

尝试在向我发送电子邮件的表格上创建触发器时出现以下错误:

  

当未使用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语句引用另一个表而不是触发器所基于的表

2 个答案:

答案 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)