我收到了一个SQL脚本,我需要使用不同的TransID值多次运行。我有20,000个TransID,我需要运行它,所以我认为我需要将20,00个TransID放在另一个表中,然后使用CURSOR一次读取一个值,然后运行整个查询。冲洗并重复。我不确定如何将其用于此脚本以及如何处理输出,因为我可以获得每个值的多个输出。我可以不放弃桌子并在最后继续添加它吗?
感谢您的帮助。我对此非常环保。这是我给出的剧本:
DECLARE @TransID uniqueidentifier SET @TransID = '**12f45e78-a234-1b3c-de34-123456789abc**' -- This is what will need to be changed 20,000 times.
DECLARE @CustomerDB nvarchar(100)
DECLARE @FullLength int
DECLARE @TrimmedLength int
CREATE TABLE #HGtmp (
HUGIdentity nvarchar(100))
DECLARE TBLCursor CURSOR FOR
SELECT HoldGroupIdentity, SavesetIdentity FROM HoldSaveset
OPEN TBLCursor
DECLARE @HGIdentity int, @SSID int
FETCH NEXT FROM TBLCursor INTO @HGIdentity, @SSID
WHILE @@FETCH_STATUS = 0
BEGIN
IF @SSID =
(SELECT SavesetIdentity FROM Saveset
WHERE idTransaction = @transID)
BEGIN
DECLARE TBLCursor1 CURSOR FOR
SELECT HoldGroupIdentity, HoldUserGroupID FROM HoldGroup
OPEN TBLCursor1
DECLARE @HGIdentity1 int, @HUGIdentity nvarchar(100)
FETCH NEXT FROM TBLCursor1 INTO @HGIdentity1, @HUGIdentity
WHILE @@FETCH_STATUS = 0
BEGIN
IF @HGIdentity = @HGIdentity1
BEGIN
SET @FullLength = (SELECT LEN(@HUGIdentity))
SET @TrimmedLength = (@FullLength - 40)
SET @CustomerDB = SUBSTRING(@HUGIdentity, 4, @TrimmedLength)
INSERT INTO #HGtmp (HUGIdentity) VALUES (@CustomerDB)
END
FETCH NEXT FROM TBLCursor1 INTO @HGIdentity1, @HUGIdentity
END
CLOSE TBLCursor1
DEALLOCATE TBLCursor1
END
FETCH NEXT FROM TBLCursor INTO @HGIdentity, @SSID
END
SELECT DISTINCT HUGIdentity AS 'DA db with Legal Holds' FROM #HGtmp
CLOSE TBLCursor
DEALLOCATE TBLCursor
DROP TABLE #HGtmp
答案 0 :(得分:0)
我会将TransID放入带有标识列的临时表中。例如,您可以将它们插入临时表:#TransID
create table #transid (transid varchar(255), id int identity(1,1))
将您的TransID插入此表,您将获得每个TransID。然后使用WHILE语句包装代码,如下所示:
declare @counter int = 1
while @counter < (select max(id)+1 from #transid)
begin
DECLARE @TransID varchar(255) = (select transid from #transid where id = @counter)
DECLARE @CustomerDB nvarchar(100)
DECLARE @FullLength int
DECLARE @TrimmedLength int
CREATE TABLE #HGtmp (
HUGIdentity nvarchar(100))
DECLARE TBLCursor CURSOR FOR
SELECT HoldGroupIdentity, SavesetIdentity FROM HoldSaveset
OPEN TBLCursor
DECLARE @HGIdentity int, @SSID int
FETCH NEXT FROM TBLCursor INTO @HGIdentity, @SSID
WHILE @@FETCH_STATUS = 0
BEGIN
IF @SSID =
(SELECT SavesetIdentity FROM Saveset
WHERE idTransaction = @transID)
BEGIN
DECLARE TBLCursor1 CURSOR FOR
SELECT HoldGroupIdentity, HoldUserGroupID FROM HoldGroup
OPEN TBLCursor1
DECLARE @HGIdentity1 int, @HUGIdentity nvarchar(100)
FETCH NEXT FROM TBLCursor1 INTO @HGIdentity1, @HUGIdentity
WHILE @@FETCH_STATUS = 0
BEGIN
IF @HGIdentity = @HGIdentity1
BEGIN
SET @FullLength = (SELECT LEN(@HUGIdentity))
SET @TrimmedLength = (@FullLength - 40)
SET @CustomerDB = SUBSTRING(@HUGIdentity, 4, @TrimmedLength)
INSERT INTO #HGtmp (HUGIdentity) VALUES (@CustomerDB)
END
FETCH NEXT FROM TBLCursor1 INTO @HGIdentity1, @HUGIdentity
END
CLOSE TBLCursor1
DEALLOCATE TBLCursor1
END
FETCH NEXT FROM TBLCursor INTO @HGIdentity, @SSID
END
SELECT DISTINCT HUGIdentity AS 'DA db with Legal Holds' FROM #HGtmp
CLOSE TBLCursor
DEALLOCATE TBLCursor
DROP TABLE #HGtmp
set @counter = @counter + 1
end
这应该为您插入临时表的每个TransID循环一次代码。