0

SQL/PDW の while ループ内で動的クエリを実行しようとしています。このクエリは、最大/最小の日付と、ファクト テーブルからの日付の個別の数を示します。データベース内のすべてのスキーマに対してこれを実行する必要があります (すべてのスキーマは同じテーブル構造を持っています)。実行しようとしているクエリを以下に示します。

DECLARE @intCNT INT
SET @intCNT = 1
DECLARE @strSQL1 VARCHAR(1000)
DECLARE @strSQL2 VARCHAR(1000)
DECLARE @strSQL3 VARCHAR(100)


SET @strSQL1 = 'SELECT MAX(FT_DT) AS MAX_DT, 
                    MIN(FT_DT) AS MIN_DT,  
                    COUNT(DISTINCT FT_DT) AS DT_CNT 
                FROM '

SET @strSQL2 = CONCAT('(SELECT TABLE_SCHEMA
                        FROM 
                            (SELECT ROW_NUMBER() OVER(ORDER BY TABLE_SCHEMA) AS ROW_NUM, 
                                TABLE_SCHEMA
                            FROM INFORMATION_SCHEMA.TABLES
                            WHERE TABLE_NAME = ''FT_TBL''
                                AND TABLE_SCHEMA LIKE ''F%'')T
                        WHERE ROW_NUM = ',@intCNT,')' )

SET @strSQL3 = '.FT_TBL'

EXEC (@strSQL1 + @strSQL2 + @strSQL3)

これを実行すると、次のエラーが発生します。

Msg 102, Level 15, State 1, Line 11
Incorrect syntax near '.'.

それは構文と関係がありますか?PDW インスタンスでこれを機能させたいと思います。SQL Server でも試してみましたが、同じエラーが発生します

4

2 に答える 2

0

実際に実行しようとしているのは次のとおりです。

SELECT MAX(FT_DT) AS MAX_DT, 
                    MIN(FT_DT) AS MIN_DT,  
                    COUNT(DISTINCT FT_DT) AS DT_CNT 
                FROM 
(SELECT TABLE_SCHEMA
                        FROM 
                            (SELECT ROW_NUMBER() OVER(ORDER BY TABLE_SCHEMA) AS ROW_NUM, 
                                TABLE_SCHEMA
                            FROM INFORMATION_SCHEMA.TABLES
                            WHERE TABLE_NAME = 'FT_TBL'
                                AND TABLE_SCHEMA LIKE 'F%')T
                        WHERE ROW_NUM = 1)
.FT_TBL

@strSQL3 の .FT_TBL はクエリを破棄します。多分それはあるべきです

set @strSQL3 = ' FT_TBL'
于 2016-02-19T13:21:41.640 に答える