SQL: Erreur, l'Expression de services limite atteinte?
"Erreur interne: Une expression de services de limite a été atteinte. S'il vous plaît regardez pour potentiellement les expressions complexes dans votre requête, et d'essayer de les simplifier."
Quelqu'un a vu ça avant, et a trouvé une bonne solution de contournement?
J'ai réussi à contourner ce problème en divisant ma requête SQL en deux parties et surtout, l'écriture de la première requête SQL de type select à une table temp et la deuxième partie, une nouvelle instruction SQL select sélectionne à partir de la table temporaire et utilise beaucoup de CROIX APPLIQUER l'opérateur de Calculer en cascade des colonnes calculées.
Ceci est un exemple de la façon dont la deuxième partie ressemble, mais je suis en utilisant beaucoup de la Croix Applys pour produire de nouvelles colonnes qui sont des calculs:
Select * from #tempTable
cross apply
(
select HmmLowestSalePrice =
round(((OurSellingPrice + 1.5) / 0.95) - (CompetitorsLowestSalePrice) + 0.08, 2)
) as HmmLowestSalePrice
cross apply
(
select checkLowestSP =
case
when adjust = 'No Room' then 'No Room'
when OrginalTestSalePrice >= CompetitorsLowestSalePrice then 'Minus'
when OrginalTeslSalePrice < CompetitorsLowestSalePrice then 'Ok'
end
) as checkLowestSP
cross apply
(
select AdjustFinalNewTestSP =
case
when FinalNewTestShipping < 0 Then NewTestSalePrice - (FinalNewTestShipping)
when FinalNewTestShipping >= 0 Then NewTestSalePrice
end
) as AdjustFinalNewTestSP
cross apply
(
select CheckFinalSalePriceWithWP =
case
when round(NewAdminSalePrice, 2) >= round(wholePrice, 2) then 'Ok'
when round(NewAdminSalePrice, 2) < round(wholePrice, 2) then 'Check'
end
) as CheckFinalPriceWithWP
DROP TABLE #tempTable
Mon but de mettre ceci dans un rapport sql et il fonctionne bien si il y a 1 utilisateur uniquement dans le #tempTable
aurez créés et supprimés dans la même exécution et les résultats sont affichés dans le rapport correctement. Mais à l'avenir, si il y a d'utilisateurs simultanés, je suis préoccupé par le fait qu'ils seront en écrivant à la même #tempTable
qui aura une incidence sur les résultats?
J'ai cherché à mettre en procédures stockées, mais toujours le message d'erreur ci-dessus.
OriginalL'auteur Standage | 2011-12-20
Vous devez vous connecter pour publier un commentaire.
Ce problème se produit car SQL Server limite le nombre d'identifiants et de constantes qui peuvent être contenues dans une seule expression d'une requête. La limite est de 65 535. Le test pour le nombre d'identificateurs de constantes et est effectuée après que SQL Server développe toutes référencées identificateurs et des constantes. Dans SQL Server 2005 et au-dessus, les requêtes en interne sont normalisées et simplifiées. Et qui comprend: *(astérisque), des colonnes calculées etc.
Pour contourner ce problème, réécrire votre requête. Référence moins des identifiants et des constantes dans la plus grande expression dans la requête. Vous devez vous assurer que le nombre d'identificateurs et des constantes dans chaque expression de la requête ne peut pas dépasser la limite. Pour ce faire, vous pouvez avoir à décomposer une requête dans plus d'une seule requête. Ensuite, créez un temporaire résultat intermédiaire.
Je ne pense pas que le fait d'avoir plusieurs utilisateurs sont la cause des problèmes. Découvrez ce post: stackoverflow.com/questions/4725812/...
Ok bravo pour la réponse!
FWIW la source d'origine semble être la support.microsoft.com/kb/913050
OriginalL'auteur TheBoyan
J'ai juste eu ce problème et résolu par la suppression de l'index UNIQUE sur la table. Pour une raison quelconque, qui semble déclencher cette erreur, bien qu'il ne peut pas comprendre pourquoi.
Par le chemin, la même requête ne fonctionne pas avec plusieurs autres indices.
OriginalL'auteur Gordon Linoff
Ce qui a fonctionné pour moi a été le remplacement de plusieurs
COALESCE
états avecISNULL
quand a été possibleOriginalL'auteur Lucas Ayala