簡體   English   中英

SQL Server:有沒有辦法同時使用SELECT和VALUES插入表值?

[英]SQL Server : is there a way to insert into a table values using both SELECT and VALUES at the same time?

我正在嘗試設置一個觸發器,它將從表中插入某些值,並使用VALUES命令指定其他值。 類似下面的代碼:

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

正如您所看到的,我正在嘗試從表中獲取IDName前2個值,而對於email我想指定一個值。

如果相關,我在table_name有一個自動增量列(稱為crt )。 那我該怎么做呢?

INSERT命令有兩種形式:

(1)您可以使用所有值,如文字或SQL Server變量 - 在這種情況下,您可以使用INSERT .. VALUES()方法:

INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
VALUES(Value1, Value2, @Variable3, @Variable4, ...., ValueN)

注意:我建議始終明確指定要插入數據的列列表 - 這樣,如果您的表突然有一個額外的列,或者您的表具有IDENTITY或計算列,您將不會有任何令人討厭的意外。 是的 - 這是一個更多的工作 - 一次 - 但是你的INSERT語句盡可能堅實,如果你的表變化,你將不必經常擺弄它。

(2)如果您沒有將所有值作為文字和/或變量,而是希望依賴另一個表,多個表或視圖來提供值,那么您可以使用INSERT ... SELECT ...方法:

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

在這里,您必須在SELECT定義與INSERT期望的完全一樣多的項目 - 這些項目可以是表格(或視圖)中的列,或者可以是文字或變量。 再次:明確提供要插入的列的列表 - 參見上文。

您可以使用一個或另一個 -但你不能將兩者攪和-你不能使用SELECT和有VALUES(...)在它的中間條款-挑兩個中的一個-堅持下去。

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

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

像這樣的東西,

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

1)

INSERT INTO dbo.TargetTable(...)
SELECT Col1, Col2, ... FROM ... WHERE ...
UNION ALL
SELECT 'Constant1' AS Col1, 2 AS Col2, '2013-12-27T00:00:00' AS Col3
UNION ALL
SELECT 'Constant2' AS Col1, 3 AS Col2, '2013-12-28T00:00:00' AS Col3

2)

DECLARE @AllRows TABLE(Col1 VARCHAR(50), Col2 INT, Col3 DATETIME);
INSERT INTO @AllRows (...)
SELECT Col1, Col2, ... FROM ... WHERE ...

INSERT INTO @AllRows (...)
VALUES ('Constant1', 2, '2013-12-27T00:00:00');

INSERT INTO @AllRows (...)
VALUES ('Constant2', 3, '2013-12-28T00:00:00');

INSERT INTO dbo.TargetTable(...)
SELECT Col1, Col2, Col3 FROM @AllRows;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM