1

テーブルにリストした複数のデータベースを使用してクエリをループしようとしています。カーソルを使用して、新しいデータベース名で USE ステートメントを切り替えようとしましたが、正しくない構文エラーが発生し続けます。これを行う方法はありますか?以下は私の試みです。

Declare @storednamesDATABASE varchar(255)
Declare storednamesDBs_cursor Cursor
for
select Database_name from ##ALLTHEstorednames

Open storednamesDBs_cursor
Fetch next from storednamesDBs_cursor into @storednamesDATABASE
WHILE @@FETCH_STATUS = 0 BEGIN

Use @storednamesDATABASE
select distinct a.database_id, c.name as Database_Name, a.object_id, b.name as Table_Name,
dateadd(day, datediff(day, 0, getdate()),0) as Use_Date
from sys.dm_db_index_usage_stats a
join sys.all_objects b
on a.object_id = b.object_id
join sys.databases c
on a.database_id = c.database_id
where (a.last_user_seek between dateadd(hour, -24, CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP
or a.last_user_scan between dateadd(hour, -24, CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP
or a.last_user_lookup between dateadd(hour, -24, CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP)
and b.type = 'u'


End
Close storednamesDBs_cursor
4

1 に答える 1

0

まず第一に、Azure を使用している場合は「use」を使用できません。

問題は、「use」が文字列 (nvarchar) を使用せず、オブジェクト名を使用することです。

これを実現するには、動的 SQL を使用できます。

Select @Sql = 'Use ' + @storednamesDATABASE + ';  --Other SQL Here'
Exec sp_executesql @Sql

ただし、現在の接続は変更されないため、残りのクエリを Sql 文字列に入れる必要があります。ストアド プロシージャを効果的に作成して実行します。

パラメータをクエリに渡すには、次のようなものを使用できます

Exec sp_executesql @Sql, N'@Var1 int, @Var2 nvarchar(50)', @Var1 = @SomeVar, @Var2 = 'Test'
于 2014-07-10T22:11:47.397 に答える