2011-08-03 152 views
1

我使用Visual Basic 6.0与SQL Server 2005SQL插入SELECT语句

这里是我的代码:

Cn.Execute "INSERT INTO schedule (sch_name, st_id, sch_note) 
      SELECT '" & txtSchedname.Text & "', st_id, '" & txtNote.Text & "' 
      FROM scheduletype 
      WHERE st_name = '" & cboSchedtype.Text & "'" 

这是一个INSERT INTO SELECT语句,并能正常工作。直接保存到[schedule]表中的两个输入和来自[scheduletype]表的一个输入。

但是如果cboSchedtype.Text没有匹配的记录怎么办?

SELECT st_id 
FROM scheduletype 
WHERE st_name = '" & cboSchedtype.Text & "'" 

这是我想做的事:

I.作出cboSchedtype.Text的值到[scheduletype]表中的“子插入”,只有当它不存在(之前的主插入查询确实如此)

二。否则正常继续。 (我的代码成功地做到这一点。)

+0

我想你想使用[MERGE](http://technet.microsoft.com/en-us/library/bb510625.aspx)语句。 – ain

+0

哦,顺便说一句,我使用SQL Server 2005. Merge是一个2008语法。 – ELM

+0

您的查询很容易受到SQL注入攻击。 –

回答

1

使用此添加scheduletype如果它不存在。

insert into scheduletype 
select 'TheScheduleType' 
where not exists (select st_name 
        from scheduletype 
        where st_name = 'TheScheduleType') 

当你这样做,你可以用你的INSERT语句对schedule,因为你知道,行会存在。

+0

现在让我们专注于你的第一个例子,特别是在SELECT语句中。如果cboSchedtype.Text在[scheduletype]表上没有匹配的值,该怎么办? 如果发生这种情况,我希望查询将cboSchedtype.Text插入到[scheduletype]表中。 BTW您的查询无效。插入语句不允许子查询。只有标量表达式是允许的。 – ELM

+0

@March - 误解了你的问题。我已经更新了答案。 –