While doing updation or insertion you can select or insert values based on case selection in SQL
For doing that will provide a better way to get filtered data updated or inserted
ALTER PROC [dbo].[uspGetNudgesDetails]
@AccessToken VARCHAR(50),
@BeaconID VARCHAR(50)=NULL
AS
BEGIN
DECLARE @CompanyID BIGINT =0
DECLARE @TargetUserID BIGINT=0
DECLARE @UserName varchar(50)
-- Get user and company
SELECT @UserName=[FirstName] + ' ' + LastName,
@TargetUserID=[ID],
@CompanyID=[CompanyID]
FROM [User] WHERE AccessToken=@AccessToken
----DECLARE @CreatedDate AS DATETIME = GETDATE()
----DECLARE @ExpiryDate AS DATETIME = (SELECT DATEADD(DAY, @DaysTillExpire, @CreatedDate))
----SET @ExpiryDate = (SELECT DATEADD(HOUR, @HoursTillExpire, @ExpiryDate))
UPDATE NUDGE
SET DaysTillExpire = CASE WHEN DATEDIFF(day, GETDATE(), ExpiryDate) < 0 THEN 0
ELSE DATEDIFF(day, GETDATE(), ExpiryDate)
END
,
HoursTillExpire = CASE WHEN DATEDIFF( hour, GETDATE(), ExpiryDate) < 0 THEN 0
ELSE DATEDIFF(day, GETDATE(), ExpiryDate)
END
,
IsExpired = CASE WHEN DATEDIFF(day, GETDATE(), ExpiryDate) < 0 AND DATEDIFF( hour, GETDATE(), ExpiryDate) < 0 THEN 1
ELSE 0
END
-- For general message with no location
SELECT N.[ID],
N.[Message],
@BeaconID as [BeaconID],
N.[LocationID],
NULL AS Location,
N.[TargetUserID],
@UserName as [TargetUser],
N.[IsCompleted],
N.[IsDelivered],
N.[IsExpired],
N.[IsDeleted],
N.[Url],
N.[DaysTillExpire],
N.[HoursTillExpire],
--DATEDIFF( day, GETDATE(), N.ExpiryDate ) AS DaysTillExpire,
--DATEDIFF( hour, GETDATE(), N.ExpiryDate ) AS HoursTillExpire,
(U.[FirstName] + ' ' + U.[LastName]) AS [CreatedBy],
CONVERT(VARCHAR(20), N.[CreatedDate], 103) as [CreatedDate],
@CompanyID as [CompanyID]
FROM [NUDGE] AS N
INNER JOIN [User] AS U ON N.[CreatedBy]=U.[ID]
WHERE N.[LocationID]=0
AND N.[TargetUserID]=@TargetUserID
AND N.[IsDeleted]=0
AND N.[IsExpired]=0
AND N.[IsCompleted]=0
UNION
-- For location dependent messages
SELECT N.[ID],
N.[Message],
@BeaconID as [BeaconID],
N.[LocationID],
L.[Location],
N.[TargetUserID],
@UserName as [TargetUser],
N.[IsCompleted],
N.[IsDelivered],
N.[IsExpired],
N.[IsDeleted],
N.[Url],
N.[DaysTillExpire],
N.[HoursTillExpire],
--DATEDIFF( day, GETDATE(), N.ExpiryDate ) AS DaysTillExpire,
--DATEDIFF( hour, GETDATE(), N.ExpiryDate ) AS HoursTillExpire,
(U.[FirstName] + ' ' + U.[LastName]) AS [CreatedBy],
CONVERT(VARCHAR(20), N.[CreatedDate], 103) as [CreatedDate],
@CompanyID as [CompanyID]
FROM [NUDGE] AS N
INNER JOIN [User] AS U ON N.[CreatedBy]=U.[ID]
INNER JOIN [LOCATION] AS L ON L.[ID]=N.[LocationID]
WHERE N.[LocationID]=(SELECT [LocationID] FROM [Location] WHERE [BeaconUUID]=@BeaconID and [CompanyID]=@CompanyID)
AND N.[TargetUserID]=@TargetUserID
AND N.[IsDeleted]=0
AND N.[IsExpired]=0
AND N.[IsCompleted]=0
END
In this case we are updating the expiration of Nudge/Message for the particular user who wants to read message so that only valid message can be seen
0 Comment(s)