我有一个关于在存储过程中使用“ 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
由于我不知道您遇到的不同情况的数量,而且我也不知道您是否只想切换一个字段或整个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子句取决于您的参数,我不知道,但这应该可以给您带来灵感)