【发布时间】:2021-05-12 10:00:01
【问题描述】:
我需要在循环中将表名的结束编号更改为从 1 到 12。这是我实际问题的一个更直接的示例,但如果可以解决,那么我可以复制结果稍后(实际问题是滚动使用过去 12 个月的报告,并且所有单独的月份都自己存储)。我知道我可以创建一个字符串查询,将每个查询联合到另一个查询中,但是当需要更改时,我仍然必须编辑所有 12 个查询。我正在寻找更高效的流程。
Declare @Query VARCHAR(MAX)
DECLARE @i INT
CREATE TABLE #Accounts (Account varchar(10))
SET @i = 1
WHILE @i <= 12
BEGIN
Select @Query = 'Select COUNT(ACCT) From dbo.table_'+quotename(@i)
INSERT INTO #Accounts
EXEC(@Query)
SET @i = @i + 1;
END;
SELECT Account FROM #Accounts
当我运行此代码时,我得到了表的无效对象名称,因为它没有将数字附加到名称的末尾。这是否可以使用 while 循环实现,还是我必须开始查看游标?
【问题讨论】:
-
调试动态SQL最简单的方法是
PRINT它。如果你这样做了,你会看到table[1]不是一个有效的对象名。但是,这种类型的 SQL 强烈表明您存在设计缺陷。
标签: sql sql-server loops ssms sql-server-2016