Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pas de support pour OVER dans MS SQL Server 2005 ?

Avez-vous essayé d'ajouter un point-virgule devant votre With déclaration? (ex. ;With q As )

Quelques remarques générales :

  1. Vous devez l'exécuter dans une requête et non dans le concepteur. Il semble que vous ayez résolu ce problème.
  2. Énumérer les colonnes au lieu d'utiliser * . Par exemple, dans l'exemple ci-dessous, remplacez Col1, Col2 par les colonnes réelles que vous souhaitez préfixer par la table d'où elles proviennent.
  3. Mettez use DatabaseName en haut de votre script suivi d'un saut de ligne, suivi de GO , suivi d'un autre saut de ligne.
  4. Si la seule instruction précédant le With l'instruction est le GO entre votre use et la requête, aucun point-virgule n'est nécessaire puisqu'il s'agit de la première instruction du lot.

use DatabaseName
GO
WITH q AS
        (
        SELECT  TableName.Col1, TableName.Col2,...
            , ROW_NUMBER() OVER (PARTITION BY dbo.[1_MAIN - Contacts].Contact_ID 
                                                        ORDER BY dbo.[1_MAIN - Contacts].Contact_ID ) AS rn
        FROM dbo.[1_MAIN - Contacts]
            INNER JOIN dbo.Referral
                ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.Referral.Referral_ID
            INNER JOIN dbo.prov_training_records
                ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.prov_training_records.Contact_ID
            LEFT OUTER JOIN dbo.Resource_Center
                ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.Resource_Center.Contact_ID
            FULL OUTER JOIN dbo.Providers
                ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.Providers.Contact_ID
        )
SELECT  *
FROM    q