Суффикс на временных таблицах SQL - PullRequest
0 голосов
/ 06 мая 2019

Я делаю скрипт, который печатает имена таблиц во временную таблицу.

Мне нужно поставить суффикс в конец вот так

#temptable1 
#temptable2 
...
#temptableXXX

Моя проблема в том, что при использовании ранга он не увеличивается, а идентичность не работает в курсоре.

Я опубликовал обе попытки. Один из них закомментирован.

DECLARE @suffix VARCHAR(1000)
DECLARE #crs insensitive CURSOR FOR
    SELECT IDENTITY(int, 1, 1) AS ID --rank() over (partition by name order by 
name)  --as Identity(1,1) 
    INTO name
    FROM sys.tables
    FOR READ ONLY

OPEN #crs

FETCH NEXT FROM #crs INTO @suffix 

WHLIE @@FETCH_STATUS = 0
BEGIN
    DECLARE @TableName VARCHAR(100)
    DECLARE @TabName CURSOR

    SET @TabName = CURSOR FOR 
        SELECT NAME + @suffix
        FROM sys.tables 
        ORDER BY name

    OPEN @TabName 

    PRINT '--- Her skal header printes '

    FETCH NEXT FROM @TabName INTO @TableName 

    WHILE @@FETCH_STATUS = 0  
    BEGIN  
        PRINT @TableName
        ----------------------------------------------------------------- start loop tabel

        ----------------------------------------------------------------- slut loop tabel
        Fetch next from @TabName into @TableName 
    END 

    CLOSE @TabName;  
    DEALLOCATE @TabName;   
END

CLOSE #crs 
DEALLOCATE #crs

Ответы [ 4 ]

4 голосов
/ 06 мая 2019

Я думаю, вы просто ищете

SELECT CONCAT(Name, ROW_NUMBER() OVER(ORDER BY Name)) TableName
FROM Sys.Tables;
0 голосов
/ 07 мая 2019

Другое решение проблемы заключается в следующем.

declare @nr int = 0;
set @nr = @nr +1 ;
#TmpTab_'+CONVERT(nvarchar(3), @nr)+'
0 голосов
/ 06 мая 2019

Попробуйте это-

SELECT NAME+CAST(RANK() OVER(ORDER BY NAME) AS VARCHAR) AS NEW_NAME 
FROM SYS.TABLES
0 голосов
/ 06 мая 2019

Во-первых, не используйте курсор :) Я бы сделал что-то вроде этого:

DECLARE 
    @Table_Name As Varchar(200)
    , @Message As VarChar(Max)
    , @Suffix As Int = 1
    , @Temp_Table_Name As Varchar(100)


Select Distinct 
    name
    , 0 As Processed
Into #Temp_Names
    from sys.tables

While Exists (Select Top 1 1
    FROM #Temp_Names
        WHERE Processed = 0)    
BEGIN
    Select Top 1 
        @Table_Name = name
            From #Temp_Names
            WHERE Processed = 0
    Set @Temp_Table_Name = 'TempTable' + Cast(@Suffix As Varchar(100))

/*

your code here

*/

    Update #Temp_Names
        Set Processed = 1
    Where name = @Table_Name
    Set @Suffix = @Suffix + 1

End

Вы можете настроить Varchar размеры - я снимал с бедра.

...