SQL 插入选择语句
Posted
技术标签:
【中文标题】SQL 插入选择语句【英文标题】:SQL Insert-Select Statement 【发布时间】:2011-08-03 09:02:15 【问题描述】:我在 SQL Server 2005 中使用 Visual Basic 6.0
这是我的代码:
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 & "'"
这是一个插入到 select 语句中并且工作正常。两个输入直接保存到 [schedule] 表中,一个输入来自 [scheduletype] 表。
但是如果 cboSchedtype.Text 没有匹配的记录怎么办?
SELECT st_id
FROM scheduletype
WHERE st_name = '" & cboSchedtype.Text & "'"
这是我想做的:
我。仅当 [scheduletype] 表不存在时(在主插入查询执行其操作之前)将 cboSchedtype.Text 的值“子插入”到 [scheduletype] 表中
二。否则正常继续。 (我的代码成功地做到了。)
【问题讨论】:
我想你想使用MERGE声明。 哦,顺便说一句,我使用 SQL Server 2005。合并是 2008 的语法。 您的查询容易受到 sql 注入攻击。 【参考方案1】:如果scheduletype
不存在,请使用它添加。
insert into scheduletype
select 'TheScheduleType'
where not exists (select st_name
from scheduletype
where st_name = 'TheScheduleType')
完成此操作后,您可以对schedule
使用插入语句,因为您知道该行将存在。
【讨论】:
现在让我们专注于您的第一个示例,尤其是 SELECT 语句。如果 cboSchedtype.Text 在 [scheduletype] 表上没有匹配值怎么办?如果发生这种情况,我希望查询将 cboSchedtype.Text 插入 [scheduletype] 表中。顺便说一句,您的查询无效。插入语句中不允许子查询。只允许使用标量表达式。 @March - 误解了你的问题。我已经更新了答案。【参考方案2】:ISNULL
:http://msdn.microsoft.com/en-us/library/ms184325.aspx
SELECT st_id FROM scheduletype WHERE st_name = ISNULL('" & cboSchedtype.Text & "', subquery)"
【讨论】:
以上是关于SQL 插入选择语句的主要内容,如果未能解决你的问题,请参考以下文章
Sql 从一个表列中选择一个最小值,并在一个 SQL 语句中将结果插入到另一个表列中
MYSQL语句中 选择最新插入的八条语句倒序输出 应该怎么写啊!!