1

動的に生成されたテーブルを持つデータベースがあります。生成されたテーブルに対してクエリを実行するストアド プロシージャを作成しており、クエリ アナライザー ツール (または同様のもの) で結果を確認する必要があります。

私が現在持っているものは次のとおりです。

DECLARE @TableName sysname

DECLARE TableNameCursor CURSOR FOR
SELECT TableName FROM [xxxTables] WHERE xxx...

OPEN TableNameCursor
FETCH NEXT FROM TableNameCursor INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @Query nvarchar
    SET @Query = 'SELECT * FROM ' + @TableName
    EXEC sp_executesql @Query

    -- This is executed as long as the previous fetch succeeds.
    FETCH NEXT FROM TableNameCursor INTO @TableName
END

しかし、複数の選択があるため、出力が得られません。結果を表示するようにストアド プロシージャを修正するにはどうすればよいですか?

すべてのテーブルが同じレイアウトになっているので、それらを結合できます。

4

1 に答える 1

2

これがスクリプトをここに投稿したときに発生したタイプミスにすぎない限り、私はついに問題を見つけたかもしれません。@Query変数の最大長を指定していません:

DECLARE @Query nvarchar

このコンテキストでは、マニュアル1に従って、最大長はデフォルトでに設定されます。

データ定義または変数宣言ステートメントでがn指定されていない場合、デフォルトの長さは1です。CAST関数でが指定されていない場合、デフォルトの長さは30です。n

にクエリ文字列を割り当てると@Query、最初の文字のみが格納されます。当然、後でクエリを実行しようとすると、何も返されないため、代わりにエラーが発生します。

最大長を指定することで修正できます。SQL Server 2005以降のバージョンでは、明示的な数値(最大4000)またはmax

DECLARE @Query nvarchar(max)

以前のバージョンmaxではサポートされていないため、明示的な番号を使用してください。

DECLARE @Query nvarchar(4000)
于 2012-05-28T09:46:57.860 に答える