使用INSERT ... SELECT

时间:2011-05-05 10:11:54

标签: sql select insert

这种INSERT变体如何正常工作(参见链接)?

http://www.sqlteam.com/article/using-select-to-insert-records

INSERT california_authors (au_id, au_lname, au_fname)
SELECT au_id, au_lname, au_fname
FROM authors
WHERE State = 'CA'

还可以用它来代替INSERT和UPDATE吗?如果它可以这种方式使用,这仅限于插入静态值(选择value1 = blah ...)还是有办法传递NOW()值?

3 个答案:

答案 0 :(得分:2)

简单地插入从SELECT查询返回的行,就像您使用一组VALUES表达式自己指定所有行一样。在两种情况下,字段数和类型都应匹配。

是的,假设您有一个类似ARTICLES(ID, TITLE, BODY, DATE)的表,并且您希望在插入期间将DATE字段设置为NOW(),那么您可以执行以下操作:

INSERT articles(title, body, date)
SELECT title, body, NOW()
FROM other_articles

然后将使用NOW()的值而不是other_articles表中的日期列。

答案 1 :(得分:2)

插入无法执行更新 - 它只能将数据插入表中,而不能更新现有数据。

不限于静态值。

Insert Into SomeTable (FirstName, LastName, FullName, ModifiedDate, Comment, Age)

Select FirstName,
       LastName,
       FirstName + ' ' + LastName,
       GetDate(),
       'This is the best comment ever',
       dbo.CustomFunctionToCalculateAge(DateOfBirth)

From Users

您也可以省略列声明(虽然不推荐)

Insert Into Ages
Select 10

您应始终确保正在插入的数据类型与列的数据类型匹配。

答案 2 :(得分:1)

它使用列名au_id,au_lname,au_fname将数据插入到表california_authors中,并从select语句select au_id, au_lname, au_fname from authors where state = 'CA'获取它的数据

上面的select语句为您提供了一个包含3列与插入列号相匹配的表。

说你有桌子(生日

id |名字|出生日期

那么你可以像这样插入

insert birthdates (id,firstname,birthdate) select 1,'Steven',NOW()

将使用定义的值在生日中插入新行。

您还可以通过在select

中定义值来组合从表中提取数据并添加from和“静态”插入数据