SQL Server:有没有办法同时使用SELECT和VALUES插入表值?

Van*_*alk 2 sql sql-server select insert

我正在尝试设置一个触发器,它将从表中插入某些值并使用该VALUES命令指定其他值.类似下面的代码:

INSERT INTO table_name(ID, Name, Email) 
    SELECT userID, userName 
    FROM users_table 
    WHERE condition1 
VALUES ('example@yahoo.com')
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试从表中获取前2个值,ID并且我想指定一个值.Nameemail

如果相关,我还有一个自动增量列(称为crt)table_name.那我该怎么做呢?

mar*_*c_s 6

INSERT命令有两种形式:

(1)您可以使用所有值,如文字或SQL Server变量 - 在这种情况下,您可以使用以下INSERT .. VALUES()方法:

INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
VALUES(Value1, Value2, @Variable3, @Variable4, ...., ValueN)
Run Code Online (Sandbox Code Playgroud)

注意:我建议始终明确指定要插入数据的列列表 - 这样,如果您的表突然有一个额外的列,或者您的表有一个IDENTITY或计算列,您将不会有任何令人讨厌的意外.是的 - 这是一个更多的工作 - 一次 - 但是你的INSERT声明尽可能坚实,如果你的桌子改变你就不必经常摆弄它.

(2)如果您没有将所有值作为文字和/或变量,而是希望依赖另一个表,多个表或视图来提供值,那么您可以使用以下INSERT ... SELECT ...方法:

INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
   SELECT
       SourceColumn1, SourceColumn2, @Variable3, @Variable4, ...., SourceColumnN
   FROM
       dbo.YourProvidingTableOrView
Run Code Online (Sandbox Code Playgroud)

在这里,你必须定义的一样多的项目SELECT作为你的INSERT期望-以及那些可以从表中(S)(或视图(S))列,或者那些可以文字或变量.再次:明确提供要插入的列的列表 - 参见上文.

您可以使用一个或另一个 -但你不能将两者搅和-你不能使用SELECT,有一个VALUES(...)在它的中间条款-挑两个中的一个-坚持下去.

所以在你的具体案例中,只需使用:

INSERT INTO dbo.table_name (ID, Name, Email) 
  SELECT userID, userName, 'example@yahoo.com'
  FROM users_table 
  WHERE condition1 
Run Code Online (Sandbox Code Playgroud)


Joh*_*Woo 5

像这样的东西,

INSERT INTO table_name (ID, Name, Email) 
SELECT userID, userName, 'example@yahoo.com' AS Email
FROM   users_table 
WHERE  ..condition1..
Run Code Online (Sandbox Code Playgroud)