使用游标循环使用多个数据库的查询

问题描述 投票:-1回答:1

我试图通过我在表中列出的多个数据库循环查询,我尝试使用游标并使用新的数据库名称切换出USE语句,但我在'@DBName'附近继续获得不正确的语法。有没有办法做到这一点?以下是我的尝试。

DECLARE  @DBName  varchar (100)
DECLARE  @Sql  varchar (100)
DECLARE  @Table   varchar (100) 
DECLARE  @IndexName varchar (100)
DECLARE TableCursor CURSOR FOR
select DBName,[Table],IndexName from IndexOverview_FragLevels
OPEN TableCursor            
FETCH NEXT FROM TableCursor INTO @DBName, @Table, @IndexName                                                                                            
WHILE @@FETCH_STATUS = 0
BEGIN
use @DBName;
DBCC DBREINDEX (@Table ,@IndexName, 90);
FETCH NEXT FROM TableCursor INTO @DBName,@Table,@IndexName
END
close TableCursor
DEALLOCATE TableCursor

在这段代码中,我将从多个数据库重新索引表。其中的数据存储在名为IndexOverview_FragLevels的表中

sql-server dynamic-sql
1个回答
0
投票

您需要在动态SQL批处理中执行该命令以设置数据库上下文。下面是一个参数化查询示例:

DECLARE @SQL nvarchar(MAX) = N'USE ' + QUOTENAME(@DBName) + N';
    DBCC DBREINDEX (@Table, @IndexName, 90);';
EXECUTE sp_executesql
     @SQL
    ,N'@Table sysname, @IndexName sysname'
    ,@Table = @Table
    ,@IndexName = @IndexName;

考虑使用Ola Hallengren's T-SQL maintenance solution而不是重新发明轮子,qazxswpoi在SQL Server社区中被广泛使用和高度重视。

© www.soinside.com 2019 - 2024. All rights reserved.