这是我的光标
printf
如果DECLARE @Row_Id Int;
DECLARE @Customer_Id Varchar(50);
DECLARE @TransId VARCHAR(50);
DECLARE @TimeStamp DATETIME;
Declare @abcDT As [dbo].[abcDataType]
DECLARE @Result_Table TABLE(Row_Id Int, Customer_Id Varchar(50));
DECLARE cur CURSOR FOR SELECT * FROM @abcDT
OPEN cur
FETCH NEXT FROM cur INTO @Row_Id, @Customer_Id
WHILE @@FETCH_STATUS = 0
BEGIN
SET @TransId = null;
SELECT TOP(1) @TransId=[Transaction_Id], @TimeStamp=[Time_Stamp] FROM [dbo].[Abc]
WHERE [Customer_Id]=@Customer_Id ORDER BY [Time_Stamp] DESC
IF (@TransId IS NULL)
BEGIN
Insert Into @Result_Table(Row_Id, Customer_Id) Values(@Row_Id,@Customer_Id);
END
FETCH NEXT FROM cur INTO @Row_Id, @Customer_Id
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM @Result_Table;
计数超过@Result_table1
,我想创建新的@Result_Table
。
我的意思是5
只包含@Result_table
个记录,如果它超过创建一个新的临时表,那么......
或者例如创建一个包含17条记录的临时表..然后创建4个临时表,包含5
条记录。
最后返回所有临时表..请帮我概括一下这个逻辑。
答案 0 :(得分:0)
这是非常草率的,但它会按照你的要求完成:
-------------------------------------
-- This code just populates a temp table #big_temp with rows of test data
----------------------------------------
DECLARE @counter INT
SET @counter = 1
CREATE TABLE #big_temp
(
row_id INT,
cust_id CHAR(6)
)
WHILE @counter < 23
BEGIN
INSERT INTO #big_temp
VALUES(@counter, '123456')
SELECT @counter = @counter + 1
END
--now we will see a table with 22 rows in it.
SELECT * FROM #big_temp
------------------------------------------------------
-- now we will divide the rows from #big_temp into #temp1, temp2, etc. as necessary
-----------------------------------------------------
DECLARE @row_count INT
DECLARE @tbl_count INT
DECLARE @i INT
DECLARE @j INT
SELECT @row_count = count(*) FROM #big_temp
SELECT @tbl_count = 1 + @row_count / 5
SELECT @i = @tbl_count
SELECT @j = 0
SELECT @i AS tbl_count
----create all the temp tables
WHILE @i > 0
BEGIN
--SELECT @i AS I, @j AS J
--create a new temp table dynamically
exec ('SELECT row_id, cust_id INTO #tbl' + @i + ' FROM #big_temp WHERE row_id BETWEEN ' + @j + '+1 AND (' + @tbl_count + '-' + @i + '+1)* 5; SELECT * FROM #tbl' + @i)
SET @j = @j + 5
SET @i = @i - 1
END
如果#big_temp可以被5整除(20行,25行等),那么@tbl_count太高了1 - 你可以添加一行来检查@row_count%5 = 0然后从@tbl_count中减1 / p>