0

エラー:

ストアド プロシージャ 'SELECT TOP 1 name FROM (SELECT TOP 5 name FROM sys.tables ORDER BY name DESC) as t ORDER BY name ASC' が見つかりませんでした。

コード:

WHILE (@interval <= @max)
BEGIN
    SET @SQL = 'SELECT TOP 1 name FROM (' +
        SELECT TOP ' + convert(varchar(10), @interval) + 
        ' name FROM sys.tables ORDER BY name DESC) as t ORDER BY name ASC'
    EXEC @SQL
    SELECT @interval = @interval + 1
END

次のコマンドを単独で実行すると、適切に機能します。

SELECT TOP 1 name 
FROM 
    (SELECT TOP 5 name 
     FROM sys.tables 
     ORDER BY name DESC) as t 
ORDER BY 
     name ASC

内側の TOP # を手動でインクリメントし、TSQL を使用せずにコマンドを実行すると、各テーブルが適切にローテーションされます。(これには最終的に、列のネストされたループと、その列内の検索のための別のネストされたループが含まれます。)

変数なしでコマンドを実行すると、これはスコープの問題だと思います。テーブル名のリストをシード 1 の主キー、row_id のインクリメント 1 で一時テーブルに挿入し、@row_id = row_id をインクリメントしてテーブルをループすることで、これを解決できないでしょうか?

助言がありますか?

4

1 に答える 1