2015-06-04 4 views
0

вот мой курсорКоличество строк создать новую временную таблицу

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][email protected]_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 содержит только 5 записи, если она превышает Creat новую временную таблицу и так ..

Или, например, Creat один темп таблицы с 17 записей .. затем создать временную таблицу 4 conatining 5 + 5 + 5 + 2 записи .. В конце верните все временные таблицы. Пожалуйста, помогите мне обобщить эту логику.

ответ

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, а затем вычесть 1 из @tbl_count

Смежные вопросы