行数创建新的临时表

时间:2015-06-04 14:03:59

标签: mysql

这是我的光标

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条记录。 最后返回所有临时表..请帮我概括一下这个逻辑。

1 个答案:

答案 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>