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)+'
我正在制作一个脚本,将 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)+'