作者:秋日里的一抹阳光_797 | 来源:互联网 | 2023-05-18 21:00
Inthebelowcodeiusedsingle@partyID750004butnowthescenarioneedstousemore@partyID.FYI
In the below code i used single @partyID=750004
but now the scenario needs to use more @partyID
. FYI like 750005,750007,750009,7500011...
在下面的代码中,我使用单个@ partyID = 750004,但现在该方案需要使用更多@partyID。仅供参考,如750005,750007,750009,7500011 ......
How can i loop using "For each"
如何使用“For each”循环
BEGIN TRY
BEGIN TRAN
Declare @partyID bigint = 750004
IF NOT EXISTS (SELECT * FROM [QAdmin].[PartyLicenseInfo] WHERE PartyId = @partyID AND [State]='SC')
BEGIN
INSERT INTO QAdmin.PartyLicenseInfo (PartyId, [State], LicenseNumber, LicenseExpirationDate, CreatedBy, CreatedDate, ModifiedBy, ModifiedDate)
VALUES (@partyID, 'SC', 'SC1234', getdate()+360, 0, GETDATE(), null, null)
END
ELSE
BEGIN
UPDATE [QAdmin].[PartyLicenseInfo] SET LicenseExpiratiOnDate= getdate()+360, ModifiedBy = 0, ModifiedDate = GETDATE()
WHERE PartyId = @partyID AND [State]='SC'
END
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
3 个解决方案
0
The best option is to get rid of the cursors and use a set based approach instead.
最好的选择是摆脱游标并使用基于集合的方法。
First, declare a table variable to store all IDs:
首先,声明一个表变量来存储所有ID:
DECLARE @partyID TABLE (partyID int)
INSERT INTO @partyID VALUES
(750005),(750007),(750009),(7500011)
Then perform INSERT INTO SELECT
and UPDATE
operations using this table variable:
然后使用此表变量执行INSERT INTO SELECT和UPDATE操作:
INSERT INTO QAdmin.PartyLicenseInfo (PartyId, [State], LicenseNumber,
LicenseExpirationDate, CreatedBy, CreatedDate, ModifiedBy,
ModifiedDate)
SELECT partyID, 'SC', 'SC1234', getdate()+360, 0, GETDATE(), null, null
FROM @partyID AS p1
WHERE NOT EXISTS (SELECT 1
FROM [QAdmin].[PartyLicenseInfo] AS p2
WHERE p2.PartyId = p1.partyID AND [State]='SC')
The above will insert new records into PartyLicenseInfo
only if your original NOT EXISTS
clause returns TRUE
.
仅当您的原始NOT EXISTS子句返回TRUE时,上述内容才会将新记录插入PartyLicenseInfo。
UPDATE p1
SET
LicenseExpiratiOnDate= getdate()+360, ModifiedBy = 0,
ModifiedDate = GETDATE()
FROM [QAdmin].[PartyLicenseInfo] AS p1
INNER JOIN @partyID AS p2 ON p1.PartyID = p2.partyID
WHERE [State]='SC'
The above will update records of PartyLicenseInfo
having PartyID
values contained in @partyID
and [State]='SC'
.
以上内容将更新PartyLicenseInfo的记录,其中PartyID值包含在@partyID和[State] ='SC'中。