2010-10-26 15 views
1

J'ai besoin de modifier une macro de la façon dont un paramètre peut être passé pour contrôler la taille maximale de l'ensemble de résultats.Dynamic "SELECT TOP: paramètre" dans Teradata Macro

Mon idée était cette SQL:

REPLACE MACRO myMacro 
(maxRows INTEGER DEFAULT 100) 
AS 
(
    SELECT TOP :maxRows 
    FROM myTable; 
); 

Mais tout ce que je reçois le message:

[SQLState 42000] Erreur de syntaxe, quelque chose attendu comme un nombre entier ou décimal compris entre 'top' et ':'.

Ce n'est pas possible pour moi de le faire d'une autre manière qu'une macro.

Comment puis-je faire cela?

Répondre

3

J'ai trouvé une façon de le faire:

REPLACE MACRO myMacro 
(maxRows INTEGER DEFAULT 100) 
AS 
(
    SELECT 
     ROW_NUMBER() OVER (ORDER BY myColumn) AS RowNo, 
     myColumn 
    FROM myTable 
    WHERE RowNo <= :maxRows; 
); 
+0

Une autre option est SQL dynamique dans une procédure stockée en utilisant la fonction DBC.SysExecSQL(). Toutefois, l'utilisation de ROW_NUMBER() dans ce cas affecte les résultats renvoyés. Dans votre requête d'origine, vous n'avez pas spécifié un ensemble ordonné. –

+0

Je crois que '<' devrait être '<='. – lins314159

+0

THX. Je l'ai changé dans le code ci-dessus. – Lars