从A表中选择结果并插入另一个表-存储过程

时间:2018-08-02 02:10:57

标签: sql sql-server stored-procedures

在我的存储过程中,我有一条select语句,该语句将返回多行结果。我想将这些结果插入到另一个表中。 当我运行存储过程时,select语句返回了两行结果,但是它只将一行结果而不是两行插入到sendemail表中。 有人可以帮忙吗?谢谢

ld

1 个答案:

答案 0 :(得分:1)

您应该使用insert . . . select

INSERT INTO [dbo].[SendEmail] ( column list goes here )
    SELECT 5, 'test@hotmail.com', 'Test', c.[Email], v.[Name], '',
           'Test Email',
           '<p>
                    Hi ' + v.[Name] + ',<br /><br />
                    Your account will be expired on ' + cast(a.AccountExpiryDate as varchar(255)) + '.
                </p>',
               0, GETUTCDATE(), 1, 1)           
   FROM Account a LEFT JOIN
        Customer c
        ON c.[Id] = a.[CustomerId] LEFT JOIN
        VIP v
        ON v.[Id] = c.[VIPId]
    WHERE a.AccountExpiryDate Between Cast(GETDATE() AS DATE) AND CAST(DATEADD(day, 30, GETDATE()) AS DATE);

注意:

  • 始终明确列出要插入的列。如果不这样做,很容易犯错误。
  • 仅包括实际具有值的列;其余的将默认为NULL(大概)。
  • 为您的表提供有意义的表别名,例如c的{​​{1}},而不是Customers
  • 使用VIP时,显式写出日期部分(DATEADD()而不是day)。
  • 此查询不需要变量。