使用多个选择插入表格

时间:2013-11-19 05:15:15

标签: sql sql-server sql-server-2008

我正在创建存储过程以使用select语句在表中插入值。 以下是我的queuedemail表,我想从两个不同的表中插入行。

Id          int Unchecked
Priority    int Unchecked
[From]      nvarchar(500)   
FromName    nvarchar(500)   
[To]        nvarchar(500)   
ToName      nvarchar(500)   
CC          nvarchar(500)   
Bcc         nvarchar(500)   
Subject     nvarchar(1000)  
Body        nvarchar(MAX)   

第一张表是要发送给客户的广告系列

Id             int  
Name           nvarchar(MAX)    
Subject        nvarchar(MAX)    
Body           nvarchar(MAX)    
Sent           bit  

我想从此广告系列中获取正文和主题,以便在上表中插入。并且我想用客户名称替换身体中的一些代币。 现在,客户价值将来自客户表,这些表具有不同的字段,如姓名,电子邮件。现在,第一张表中的toname将来自此客户表。

任何建议。

如果不理解,请原谅。如果有的话留下评论!!!

假设我有一个包含2个条目的客户表,如

Id  F_Name    L_Name    Email 
1   Nitin     Varpe     fedexnit@gmail.com
2   Prashant  Bankar    pbankar@yahoo.com

现在我有一个像

这样的身体

亲爱的%Customer.Name%

//这里是广告系列的正文

现在点击发送广告系列。 '%'中引用的此标记将替换为客户名称。然后,此主体应通过客户电子邮件插入queuedemail表'to'列,并与客户名称相同。

Thanx全部为你的回复。

希望从你那里看到更多!!!

3 个答案:

答案 0 :(得分:1)

尝试这样的事情

INSERT INTO queuedemail 
(
    FromName,
    To,
    Body
)
SELECT 
    F_Name,
    Email,
    'Dear' + F_Name +
    (
     SELECT body 
     FROM campaign 
     WHERE -- criteria for selecting body
    )

FROM customer 
WHERE -- your where condition criteria

在insert和select子句

中包含您需要的字段

答案 1 :(得分:0)

客户名称(哪个表格)在哪里?

令牌和客户名称之间的关系。您如何确定要用哪个客户名称替换哪个令牌。

首先构建你的require select语句并验证每一列和输出。关于外连接/左/内的决定。

将在正文部分中多次%Customer.Name%或仅一次。 每排都一样吗? 如果%Customer.Name%将在每一行和每个正文中,那么这很容易 你可以简单地用名字和姓氏替换。

答案 2 :(得分:0)

终于提出了解决方案。谢谢所有人的支持

以下是我的存储过程

创建临时表以从客户表中获取所有记录。

GO
/****** Object:  StoredProcedure [dbo].[SendCampaign]    Script Date: 11/19/2013 14:40:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SendCampaign]
  (@CampaignSubject nvarchar(max),
  @CampaingBody nvarchar(max),
    @TotalRecords int OutPut)

AS
BEGIN
   SET NOCOUNT ON

   Declare @Body  nvarchar(max)=@CampaingBody
   Declare @Subject  nvarchar(max)=@CampaignSubject

   Select *
Into   #Temp
From   Customer where Active=1 

Select *from #Temp
   Declare @Id int


     Begin
Insert Into QueuedEmail([Priority],[From],FromName,[To],[ToName],CC,Bcc,
[Subject],[Body],CreatedonUtc,SentTries,SentonUtc,EmailAccountid,Attachment)

  Select  3,'test@test.com','My Site',Email,'Null','Null','Null',@Subject,
dbo.ModifyCampaign(@Body,CAST(NewsLetterSubscriptionGuid as NVARCHAR(200)),Email)
,GEtUtcDate(),0,null,4,'Null'
              from #Temp






     END
    Drop table #Temp

END 

选择语句中的上方ModifyCampaign是我编写的用于替换广告系列中的令牌以及相应客户详细信息的功能。

Thanx all :)并希望将来能帮助其他人