2009-10-14 10 views
-3

(NDLR, j'ai essayé de. Traduire et mettre en forme de façon plus appropriée Voir ci-dessous pour l'original)Remplacez @prmMax d'asp.net par SQL-server Query?

Je veux faire une requête SQL pour obtenir les « ACTIVÉE DANS 28 JOURS APRÈS L'ENREGISTREMENT » et les « ACTIVES PAR-DESSUS 28 JOURS APRÈS L'ENREGISTREMENT ". Comment puis-je corriger cette requête?

En dessous de cette requête est pour obtenir ces « dans les 28 jours ACTIVES PAR APRÈS L'ENREGISTREMENT »

select Month(reg_Date) as RegMonth, datediff(day, reg_date, reg_activationdate) as RegDiff, 
count(*) as RegCount from dailyregistration 
where datediff(day, reg_date, reg_activationdate) <= @prmMax 
group by Month(reg_Date), datediff(day, reg_date, reg_activationdate) 
order by Month(reg_Date), datediff(day, reg_date, reg_activationdate) 

Malheureusement, je reçois l'erreur suivante:

Msg 137, Level 15, State 2, Line 3 
Must declare the scalar variable "@prmMax". 

Comment puis-je résoudre ce problème?

Voici une ligne d'exemple dans le DB: (un peu inintelligible)

#month##Register#  #activation elapsed time#     #Activated##Unactivated##port out# 
      #<0##0##1##2##3##4##5##6##7##14##21##28##>28  
#March##1360# 

originale ci-dessous


je devais en faire QUERY SQL-SERVER FORMULAIRE POUR OBTENIR LES " ACTIVÉ DANS LES 28 JOURS APRÈS L'ENREGISTREMENT "ET AUSSI" ACTIVÉ AU-DESSUS 28 JOURS APRÈS L'ENREGISTREMENT ". COMMENT PUIS-JE LE CHANGER EN REQUÊTE SQL-SERVER? AVANT CE I HAD ESSAYER POUR DANS SQL SERVEUR,

En dessous de cette requête est pour obtenir ces "ACTIVÉE DANS 28 JOURS APRÈS L'ENREGISTREMENT"

select Mois (reg_Date) comme RegMonth, datediff (jour, reg_date, reg_activationdate) comme RegDiff, count (*) comme RegCount de dailyregistration où datediff (jour, reg_date, reg_activationdate) < = @prmMax groupe par mois (reg_Date), datediff (jour, reg_date, reg_activationdate) commande par mois (reg_Date), datediff (jour, reg_date, reg_activationdate)

MAIS SUGGERER AVEC L'ERREUR Msg 137, niveau 15, état 2, ligne 3 doit déclarer la variable scalaire "@prmMax".

COMMENT PUIS-JE LE CHANGER? Parce que je devais le faire comme tabel Pouvez-vous s'il vous plaît copier les données ci-dessous dans NOTEPAD, puis vous verrez ce dont j'ai besoin, désolé que je ne peux pas attiser une image po

Total   Activation Elapsed Time (in Days)                Total   Total  Total 

mois Inscrit < 0 0 1 2 3 4 5 6 7 14 21 28> 28 Activé inactivé Port Out 1360 Mars 0 571 142 56 42 28 21 22 10 76 37 15 109 1129 231 0 Avril 13601 0 7577 1260 381 259 200 139 134 138 433 277 233 947 11978 1623 227 Mai 14216 0 6726 1397 479 333 212 187 150 180 565 332 254 1004 11819 2397 412 Juin 9738 0 5551 999 340 214 132 112 87 77 365 168 107 435 8587 1151 354 Juillet 10527 0 6528 1225 342 190 130 88 94 61 293 139 86 373 9549 978 474 Août 15214 1 10115 1353 384 255 184 136 97 108 397 224 143 298 13695 1519 369 September23724 0 13499 3671 1230 893 328 329 498 226 1969 112 64 27 22 846 878 204 Octobre 8383 0 5673 1692 323 77 30 20 8 8 14 0 0 0 7845 538 237

+0

peut vous faire un petit cas donnent également votre question un vrai titre et peut-être les gens vous aider à résoudre votre problème – RageZ

+0

_Less_ gras et les bouchons rendront votre question plus lisible et attireront plus d'attention. Aussi: nous avons besoin de voir le code _some_. Juste pas le fichier source entier. –

+1

ajouter Déclare @prmMax datetime Set @prmMax = '01/01/1800' - date avant que la requête –

Répondre

2

Très simple: votre requête utilise un paramètre @prmMax et vous n'avez évidemment pas déclaré ce paramètre - déclarez-le simplement et donnez-lui une valeur et tous vos problèmes sont partis! Je ne sais pas si vous appelez cela dans une procédure stockée (le proc stocké a-t-il un paramètre appelé @prmMax?) Ou autre chose - la variable n'existe tout simplement pas et c'est votre problème.

SELECT 
    MONTH(reg_Date) as RegMonth, 
    DATEDIFF(day, reg_date, reg_activationdate) as RegDiff, 
    COUNT(*) as RegCount 
FROM 
    dbo.dailyregistration 
WHERE 
    DATEDIFF(day, reg_date, reg_activationdate) <= @prmMax 
                ^^^^^^^^^^ 
GROUP BY 
    MONTH(reg_Date), 
    DATEDIFF(day, reg_date, reg_activationdate) 
ORDER BY 
    MONTH(reg_Date), 
    DATEDIFF(day, reg_date, reg_activationdate) 
+0

Ou puisqu'il ne voulait que 28 jours il suffit d'entrer le nombre 28, bien que cela vous limite à utiliser seulement 28 – RC1140

+0

Oui, c'est une solution rapide - mais le problème est probablement plus profond et l'OP ne se rend pas compte qu'il est copié et collé du code d'un autre endroit et a manqué de vérifier des choses comme des variables "balançant" dans l'air maintenant .... –

1

Je vais répondre, mais seulement à cause de l'observation de l'OP qu'ils ne peuvent toujours pas obtenir ce travail, même après the correct answer from marc_s, où l'on a la nécessité de déclarer @prmMax et initialiser @prmMax out. Pour l'exécution de la requête ajouter le DECLARE et SET avant votre requête, comme ici:

DECLARE @prmMax int 
SET @prmMax=28 

--your query here-- 
select Month(reg_Date) as RegMonth, datediff(day, reg_date, reg_activationdate) as RegDiff, 
count(*) as RegCount from dailyregistration 
where datediff(day, reg_date, reg_activationdate) <= @prmMax 
group by Month(reg_Date), datediff(day, reg_date, reg_activationdate) 
order by Month(reg_Date), datediff(day, reg_date, reg_activationdate)