簡體   English   中英

使用另一個表中的查詢結果值將行插入表中

[英]Inserting a row to a table using query result values from another table

我有一個存儲過程:

CREATE PROCEDURE MyProc
(
    @Param1  [datetime],
    @Param2  [nvarchar](20),
    @Param3  [nvarchar](20),
    @Param4  [nvarchar](20),
    @Param5  [nvarchar](20),
)
AS
BEGIN   
INSERT INTO MyTable1
  (
    Field1,
    Field2,
    Field3,
    Field4,
    Field5
  )   
 SELECT         
    @Param1,
    @Param2,
    @Param3,
    Field12,
    'constantValue'         
FROM   MyTable2
WHERE  Field13 = @Param4
END

我怎么可能改變存儲過程,以便它插入Field5MyTable1不是constantValue但另一個查詢的結果MyTable2與最后一個參數( @Param5 )?
即:

FROM   MyTable2
WHERE  Field13 = @Param5
INSERT INTO MyTable1
(
  Field1,
  Field2,
  Field3,
  Field4,
  Field5
)   
SELECT         
    @Param1,
    @Param2,
    @Param3,
    Field12,
    (
         select field_name from MyTable2 where Field13 = @Param5
    )
FROM   
    MyTable2
WHERE 
    Field13 = @Param4
END

或者聲明一個新變量:

SET @newparam = (SELECT field_name FROM MyTable2 WHERE Field13 = @Param5 )

然后將此新參數插入到insert語句中。

CREATE PROCEDURE MyProc
(
    @Param1  [datetime],
    @Param2  [nvarchar](20),
    @Param3  [nvarchar](20),
    @Param4  [nvarchar](20),
    @Param5  [nvarchar](20),
)
AS
BEGIN   
INSERT INTO MyTable1
  (
    Field1,
    Field2,
    Field3,
    Field4,
    Field5
  )   
 SELECT         
    @Param1,
    @Param2,
    @Param3,
    Field12,
    (SELECT thing_i_care_about FROM MyTable2 WHERE Field13 = @Param5)
FROM   MyTable2
WHERE  Field13 = @Param4
END

假設每個SELECT中有一行

SELECT         
    @Param1, @Param2, @Param3, Tp4.Field12, Tp5.Field12
    NULL        
FROM
   MyTable2 Tp4
   CROSS JOIN
   MyTable2 Tp5
WHERE
   Tp4.Field13 = @Param4 AND Tp4.Field13 = @Param5

JOIN根據您的期望而變化,例如FULL OUTER JOIN .. ON 1=1

如果任一查詢返回多於1行,則:

  • 內聯子查詢失敗
  • 插入沒有意義:插入4行3行?

它可以通過以下不同的方式完成,在這兩種情況下,我認為我們應該考慮一個事情,如果返回的數據可能不止一個。

一種。

INSERT INTO MyTable1
(
 Field1,
 Field2,
 Field3,
 Field4,
 Field5
)   

SELECT         
 @Param1,
 @Param2,
 @Param3,
 Field12,
  (SELECT TOP 1 Column_Name FROM MyTable2 WHERE Field13 = @Param5)
FROM   MyTable2
WHERE  Field13 = @Param4

DECLARE @Field13 VARCHAR(20)
SELECT TOP 1 @Field13  = FROM MyTable2 WHERE Field13 = @Param5

INSERT INTO MyTable1
(
 Field1,
 Field2,
 Field3,
 Field4,
 Field5
)   

SELECT         
 @Param1,
 @Param2,
 @Param3,
 Field12,
 @Field13
FROM   MyTable2
WHERE  Field13 = @Param4

在任何一種情況下都會成功,盡管“Field13 = @Param5”條件可能會顯示多個數據但會對第一個(TOP 1)數據起作用。

暫無
暫無

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

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