【发布时间】:2019-05-06 18:42:00
【问题描述】:
我正在制作一个将表名打印到临时表中的脚本。
我需要它像这样在末尾添加一个后缀
#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
【问题讨论】:
-
你想在这里做什么?为什么需要为此使用光标?您是否只是想列出所有表名,如
TableName1, TableName2 ..? -
我正在做一个制作增量脚本的脚本。为此,我正在使用很多#temptables,但它们需要在每次运行后递增 1,因此我得到 #temp1、#temp2 等。否则编译器会说该表已经存在
-
您仍然不需要光标。但这也是XY Problem,您可以在其中寻求y 解决方案的帮助,但没有描述主要的x 问题。构建许多#temptables 可能会被重构。
标签: sql sql-server prefix