SQL案例函数-多列插入[关闭]

问题描述 投票:0回答:1

我有一个关于在存储过程中使用“ case”函数的问题:以下是我的代码:

ALTER PROCEDURE [dbo].[BoomsDBSTransfer] (@buildID AS VARCHAR(50))
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO [dbo].[Booms DBS] (
        ID
        ,SystemID
        ,SalesOrderNo
        ,"LineNo"
        ,OrderQty
        ,ProductionOrder
        ,Workstation
        ,"Status"
        ,"Date"
        )
    SELECT [SystemID] + '_' + LEFT([OrderQty], 1) + '_TS1' [SystemID]
        ,[SalesOrderNo]
        ,[LineNo]
        ,[OrderQty]
        ,[ProductionOrder]
        ,'Test Station X' 'Planned'
        ,[Date]
    FROM [Booms DBS]
    WHERE [ID] = @buildID
        AND [Status] = 'Completed'
END

我需要将其包装在case语句中,以便根据参数的值来选择插入的内容是不同的。我尝试了一种方法,但是它包括将每个单独的选择包装在一个看起来很乱的case语句中。

是否有任何方法可以根据参数值切换插入的整个选择?

谢谢,Farhan

sql sql-server performance optimization
1个回答
0
投票

由于我不知道您遇到的不同情况的数量,而且我也不知道您是否只想切换一个字段或整个SELECT语句,答案有点困难,或者是一片黑暗。一种方法是

INSERT INTO xyz (a, b, c)
SELECT a,
   CASE @param
      WHEN '1' THEN 'First case'
      WHEN '2' THEN 'Second case'
      WHEN '3' THEN 'Third case'
      ...
      ELSE 'Default'
   END AS b,
   c
FROM sometable WHERE somecondition

另一种可能是使用动态SQL:

DECLARE @sqlstring nvarchar(max)
SET @sqlstring = 'INSERT INTO xyz (a, b, c) '
IF @param = '1' THEN
   SET @sqlstring = @sqlstring + 'SELECT a1, b1, c1 FROM sometable '
IF @param = '2' THEN
   SET @sqlstring = @sqlstring + 'SELECT a2, b2, c2 FROM someothertable '
...
SET @sqlstring = @sqlstring + ' WHERE somecondition'

EXECUTE sp_executesql @sqlstring

(或者WHERE子句取决于您的参数,我不知道,但这应该可以给您带来灵感)

© www.soinside.com 2019 - 2024. All rights reserved.