Tsql 根据参数复制数据
我现在完全昏迷了,希望有人能帮我。在我的应用程序中,用户可以通过单击按钮将数据从一个表复制到另一个表。从源表中检索数据的方式不同,具体取决于用户单击“复制”按钮的页面 我的桌子 制表符规划 制表拷贝 我的存储过程 间谍策划Tsql 根据参数复制数据,tsql,stored-procedures,sql-server-2014,Tsql,Stored Procedures,Sql Server 2014,我现在完全昏迷了,希望有人能帮我。在我的应用程序中,用户可以通过单击按钮将数据从一个表复制到另一个表。从源表中检索数据的方式不同,具体取决于用户单击“复制”按钮的页面 我的桌子 制表符规划 制表拷贝 我的存储过程 间谍策划 spCopyPlanning根据参数将数据从tabPlanning复制到tabPlanningCopy: ALTER PROCEDURE dbo.spCopyPlanning @PlanningId INT = NULL @RequestId INT = NU
spCopyPlanning
根据参数将数据从tabPlanning
复制到tabPlanningCopy
:
ALTER PROCEDURE dbo.spCopyPlanning
@PlanningId INT = NULL
@RequestId INT = NULL
AS
BEGIN
IF @PlanningId IS NOT NULL
BEGIN
IF EXISTS (SELECT * FROM tabPlanning WHERE RequestId = @RequestId)
BEGIN
INSERT INTO tabPlanningCopy(RequestId, Field1, Field2, Field3)
SELECT RequestId,
Field1,
Field2,
Field3
FROM tabPlanning
WHERE PlanningId = @PlanningId
END
END
ELSE
BEGIN
IF EXISTS (SELECT * FROM tabPlanning WHERE RequestId = @RequestId)
BEGIN
INSERT INTO tabPlanningCopy(RequestId, Field1, Field2, Field3)
SELECT RequestId,
Field1,
Field2,
Field3
FROM tabPlanning
WHERE RequestId = @RequestId
END
END
END
-- @PlanningId IS NOT NULL -> copy the row with PlanningId = @PlanningId
-- @PlanningId IS NULL -> copy the row with RequestId = @RequestId
程序正在按现在编写的方式运行。然而,我不认为这是获得我想要的东西的最好方法(我讨厌冗余!)。我很确定可以通过扩展
WHERE
语句来实现,但是我现在没有任何线索来解决这个问题。有谁能给我一个解决方案来摆脱我的冗余代码吗?它是冗余的,因为除了WHERE子句之外,所有的东西都是相同的,除非它计算一个参数是否为null。由于参数是否为null,只需在Where中指定两对条件即可。请尝试以下操作:
ALTER PROCEDURE dbo.spCopyPlanning
@PlanningId INT = NULL
@RequestId INT = NULL
AS
BEGIN
IF EXISTS (SELECT * FROM tabPlanning WHERE RequestId = @RequestId)
BEGIN
INSERT INTO tabPlanningCopy(RequestId, Field1, Field2, Field3)
SELECT RequestId,
Field1,
Field2,
Field3
FROM tabPlanning
WHERE (@PlanningId is not null
and PlanningId = @PlanningId)
or (@PlanningId is null
and RequestId = @RequestId)
END
END
ALTER PROCEDURE dbo.spCopyPlanning
@PlanningId INT = NULL
@RequestId INT = NULL
AS
BEGIN
IF @PlanningId IS NOT NULL
BEGIN
IF EXISTS (SELECT * FROM tabPlanning WHERE RequestId = @RequestId)
BEGIN
INSERT INTO tabPlanningCopy(RequestId, Field1, Field2, Field3)
SELECT RequestId,
Field1,
Field2,
Field3
FROM tabPlanning
WHERE PlanningId = @PlanningId
END
END
ELSE
BEGIN
IF EXISTS (SELECT * FROM tabPlanning WHERE RequestId = @RequestId)
BEGIN
INSERT INTO tabPlanningCopy(RequestId, Field1, Field2, Field3)
SELECT RequestId,
Field1,
Field2,
Field3
FROM tabPlanning
WHERE RequestId = @RequestId
END
END
END
-- @PlanningId IS NOT NULL -> copy the row with PlanningId = @PlanningId
-- @PlanningId IS NULL -> copy the row with RequestId = @RequestId
ALTER PROCEDURE dbo.spCopyPlanning
@PlanningId INT = NULL
@RequestId INT = NULL
AS
BEGIN
IF EXISTS (SELECT * FROM tabPlanning WHERE RequestId = @RequestId)
BEGIN
INSERT INTO tabPlanningCopy(RequestId, Field1, Field2, Field3)
SELECT RequestId,
Field1,
Field2,
Field3
FROM tabPlanning
WHERE (@PlanningId is not null
and PlanningId = @PlanningId)
or (@PlanningId is null
and RequestId = @RequestId)
END
END