2017-03-07 76 views
0

我需要一些帮助,对于SQL我还是有些陌生。我有一个从另一个应用程序作为smartobject执行的存储过程。 te之前的代码看起来像第1部分中的代码。我根据第2部分更改了代码,以便存储过程首先查看Sales id类型实际上是否与来自存储过程的表成员资格中的成员资格号相比较然后在成员表中执行相同的操作。如果查询是3,并且会员编号是3,我希望它在会员表中使用到期日期,而不是使用IF的存储过程

SELECT @ExpiryDate = DATEADD(YEAR,1,DATEADD(d,-1,DATEADD(m, 0,@CreatedDate)))

即woudl364天添加到当前日期

SECTION1

USE [HotelStayWorkflow] 
GO 
/****** Object: StoredProcedure [dbo].[CP_Create_Card] Script Date: 3/7/2017 2:50:06 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
ALTER PROCEDURE [dbo].[CP_Create_Card] 
    -- Add the parameters for the stored procedure here 
@membershipNumber VARCHAR(MAX), 
@CardId BIGINT = NULL OUTPUT, 
@minsToFirstDeadline int = 2880,--defailt 2 days 
@minsToSecondDeadline int = 5760 --default 4 days 



AS 
BEGIN 
    DECLARE @CreatedDate DATETIME = GETDATE() 
    DECLARE @ExpiryDate DATETIME 
    DECLARE @FirstDeadine DATETIME 
    DECLARE @SecondDeadline DATETIME 

    BEGIN 
       SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, 0, @CreatedDate))) 
    END 


    SELECT @FirstDeadine = DATEADD(MINUTE,@minsToFirstDeadline,GETDATE()) 
    SELECT @SecondDeadline = DATEADD(MINUTE,@minsToSecondDeadline,GETDATE()) 
    --Create Card Linked to Membership below 
    IF EXISTS(SELECT * FROM Cards WHERE MembershipNumber = @membershipNumber AND Enabled = 1) 
    BEGIN 
     UPDATE Cards SET Enabled = 0 WHERE MembershipNumber = @membershipNumber AND Enabled = 1 
    END 

    INSERT INTO Cards (CardStatusId, MembershipNumber, PrintedDate, Created, Modified, ExpiryDate,FirstDeadline,SecondDeadline, Enabled) 
    VALUES(1, @membershipNumber, @CreatedDate, @CreatedDate, @CreatedDate, @ExpiryDate,@FirstDeadine,@SecondDeadline, 1)  
    SET @CardId = SCOPE_IDENTITY() 

      -- Return Card Id 


END 

第2节

USE [HotelStayWorkflow] 
GO 
/****** Object: StoredProcedure [dbo].[CP_Create_Card] Script Date: 3/7/2017 1:08:05 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
ALTER PROCEDURE [dbo].[CP_Create_Card] 
    -- Add the parameters for the stored procedure here 
@membershipNumber VARCHAR(MAX), 
@CardId BIGINT = NULL OUTPUT, 
@minsToFirstDeadline int = 2880,--defailt 2 days 
@minsToSecondDeadline int = 5760 --default 4 days 



AS 
BEGIN 
    DECLARE @CreatedDate DATETIME = GETDATE() 
    DECLARE @ExpiryDate DATETIME 
    DECLARE @FirstDeadine DATETIME 
    DECLARE @SecondDeadline DATETIME 

    BEGIN 
      IF EXIST (FROM Memberships WHERE MembershipNumber = @MembershipNumber AND SalesTypeId = 3 AND Enabled =1) 
      AND 
      IF EXIST (FROM Members WHERE MembershipNumber = @MembershipNumber AND Enabled =1) 
      SELECT @ExpiryDate = dbo.Members.MembershipExpiry 
     OR    

      SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, 0, @CreatedDate))) 
    END 


    SELECT @FirstDeadine = DATEADD(MINUTE,@minsToFirstDeadline,GETDATE()) 
    SELECT @SecondDeadline = DATEADD(MINUTE,@minsToSecondDeadline,GETDATE()) 
    --Create Card Linked to Membership below 
    IF EXISTS(SELECT * FROM Cards WHERE MembershipNumber = @membershipNumber AND Enabled = 1) 
    BEGIN 
     UPDATE Cards SET Enabled = 0 WHERE MembershipNumber = @membershipNumber AND Enabled = 1 
    END 

    INSERT INTO Cards (CardStatusId, MembershipNumber, PrintedDate, Created, Modified, ExpiryDate,FirstDeadline,SecondDeadline, Enabled) 
    VALUES(1, @membershipNumber, @CreatedDate, @CreatedDate, @CreatedDate, @ExpiryDate,@FirstDeadine,@SecondDeadline, 1)  
    SET @CardId = SCOPE_IDENTITY() 

      -- Return Card Id 


END 
+0

你在这里有什么问题? –

+0

当我尝试在我添加的部分上运行我的存储过程时,它给了我错误,不知道我是否正确地使用了命令 –

+0

您可以添加您的错误,以及您想要实现的问题以及我将尝试并帮助 –

回答

0

请尝试此操作,因为您没有包括所有列,因此很难完成此答案。

SELECT @ExpiryDate = M.MembershipExpiry From Memberships M WHERE M.MembershipNumber = @MembershipNumber AND M.SalesTypeId = 3 AND M.[Enabled] =1 

     IF @ExpiryDate IS NULL 
     BEGIN 
      SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, 0, @CreatedDate))) 
     end 
+0

嗨我试过给出的代码,但它是从错误的表中拉列。我调整了代码,但只有当M.SalesTypeId = 3 AND M. [Enabled] = 1必须使用到期时,我才会在第二个'AND和表名'上错误 –

0

改变代码

BEGIN SELECT = @ExpiryDate从MembershipExpiry成员M其中M.MembershipNumber = @MembershipNumber
成员MS WHERE M.MembershipNumber = @MembershipNumber AND SalesTypeId = 3,MS [启用] = 1

IF @ExpiryDate IS NULL 
      SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, 0, @CreatedDate))) 
END