SQL 临时表的后缀

Suffix on SQL temp tables

我正在制作一个脚本,将 table 名称打印到临时文件 table 中。

我需要它像这样在末尾放置一个后缀

#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

我想你只是在寻找

SELECT CONCAT(Name, ROW_NUMBER() OVER(ORDER BY Name)) TableName
FROM Sys.Tables;

首先,不要使用光标 :) 我会这样做:

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 尺寸 - 我是从臀部开始拍摄的。

试试这个-

SELECT NAME+CAST(RANK() OVER(ORDER BY NAME) AS VARCHAR) AS NEW_NAME 
FROM SYS.TABLES

问题的另一个解决方案是这个。

declare @nr int = 0;
set @nr = @nr +1 ;
#TmpTab_'+CONVERT(nvarchar(3), @nr)+'