寻找编写此INSERT查询的最有效方法

时间:2011-08-02 19:40:15

标签: sql sql-server-2008 insert performance

寻找编写此INSERT查询(和最少代码)的最有效方法:

INSERT INTO [exportnote] (
    [versionnumber],
    [createdate],
    [LabAccessioningNumber],
    [Text],
    [exporttestresultreportid]
) 
SELECT 
    1,
    GETDATE(),
    @lan,
    notetemp.notetext,
    @new_exporttestresultreportid
FROM 
(
    SELECT dbo.[note].notetext
    FROM dbo.[note] 
    WHERE  
        [note].notetypeid IN (15,17) -- SAMPLE NOTES  possibly 5,3
        AND [note].noteobjectid = @sampleid -- dbo.[sample].sampleid
        AND [note].active = 1 

    UNION ALL

    SELECT 
        dbo.[note].notetext
    FROM 
        dbo.[note]
    WHERE 
        [note].notetypeid IN (11) -- CLIENT NOTES
        AND [note].noteobjectid = @clientid -- dbo.[client].clientid
        AND [note].active = 1

    UNION ALL

    SELECT 
        dbo.[note].notetext
    FROM 
        dbo.[note]
    WHERE 
        [note].notetypeid IN (2,7) -- TEST NOTES
        AND [note].noteobjectid = @testid -- dbo.[test].testid
        AND dbo.[note].active = 1
) AS notetemp   

2 个答案:

答案 0 :(得分:3)

此?同一个表上的OR和UNION 通常是可以互换的:

INSERT ...
SELECT
    1,
    GETDATE(),
    @lan,
    n.notetext,
    @new_exporttestresultreportid
FROM dbo.[note] n
WHERE  
    n.active = 1 
    AND
    (
       (n.notetypeid IN (15,17) AND n.noteobjectid = @sampleid)
        OR
       (n.notetypeid IN (2,7) AND n.noteobjectid = @testid)
        OR
       (n.notetypeid IN (11) AND n.noteobjectid = @clientid)
    )

答案 1 :(得分:2)

您可以将3个选项合并为1:

SELECT dbo.[note].notetext    
 FROM dbo.[note]      
WHERE  [note].active = 1         
 AND  ( 
           ( [note].notetypeid IN (15,17)       
              AND [note].noteobjectid = @sampleid )
       OR (  [note].notetypeid IN (11) 
              AND [note].noteobjectid = @clientid )
       OR (  [note].notetypeid IN (2,7)        
             AND [note].noteobjectid = @testid )
      )