寻找编写此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
答案 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 )
)