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 语句中将结果插入到另一个表列中

sql数据库语句

MYSQL语句中 选择最新插入的八条语句倒序输出 应该怎么写啊!!

选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)

MySQL 的 SQL 管理器 - 选择插入空行

从循环/选择语句中插入表值作为变量