2011-11-21 17 views
2

我有一個存儲過程的查詢結果值插入行到表:使用另一臺

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 

我怎麼可能改變存儲過程,以便把它插入到的MyTable1不是constantValue但在Field5還有另一個查詢結果MyTable2與最後一個參數(@Param5)?
即:

FROM MyTable2 
WHERE Field13 = @Param5 
+0

只需將常量值更改爲myTable2.fieldname – Sparky

+0

查詢中有多少行? 1或多於1? – gbn

+0

我想要來自同一個字段'Field12'的兩個值,但來自'MyTable2'的不同記錄 – rem

回答

4
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) 

然後插入新參數爲插入語句。

3
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 
2

假設一列從每個選擇

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

取決於你所期望的如FULL OUTER JOIN .. ON 1=1

如果任何一個查詢返回超過1行則連接的變化:

  • 在線子查詢失敗
  • 插入沒有意義:用4行和3行插入什麼?
1

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

a。

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 

b。

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)數據將工作。