Sql

2009-03-23 6 views
0

Je suis en train d'écrire une procédure stockée c'est ce que j'ai jusqu'à présentSql

Create procedure sp_Create_order 
@P_nafn varchar(50), 
@P_fj int, 
@P_sótt datetime, 
@F_kt varchar(10), 
@V_nr int, 
@L_id int 

as 
begin 
    set nocount on 

if exists(
   select * from Lotur 
   where [email protected]_id and 
   @P_sótt between L_hefst and L_pfrest 
) 
INSERT INTO Pantar(P_nafn, P_fj, P_sótt, F_kt, V_nr, L_id) 
VALUES (@P_nafn, @P_fj, @P_sótt, @F_kt, @V_nr, @L_id) 
end 

mais je reçois ces erreurs

Msg 102, niveau 15, état 1, Procédure sp_Create_order, ligne 14 Incorrect syntaxe près de ''.

Msg 102, niveau 15, état 1, procédure sp_Create_order, ligne 15 Incorrect syntaxe près de ''.

sur ces lignes

select * from Lotur 
where [email protected]_id 

et

@P_sótt, L_hefst et L_pfrest sont toutes les dates et je tryng de mettre une condition à dire que rien ne doit être mentionné à moins @P_sótt est égal à ou entre L_hefst et L_pfrest

+0

Quelle version et quelle saveur de SQL utilisez-vous? J'ai été capable de créer cette procédure sans erreurs sur SQL Server 2000 et 2005. – harpo

+0

J'utilise mssql 2005 dès que je l'ai replacé * avec L_id il a commencé à travailler –

Répondre

1
  • S'il vous plaît utiliser des noms significatifs pour vos variables
  • Ne créez pas sp pour tout comme celle-ci
  • Modifier la requête pour avoir SELECT L_ID NOT SELECT *
  • En ce qui concerne l'erreur, quelque chose probablement vous avez mal orthographié
+0

Est-ce que select * a vraiment de l'importance si c'est dans un existe? –

+0

La procédure telle qu'elle est compilée et exécutée pour moi sous SQL Server 2005, c'est peut-être un autre problème étrange. –

+0

Je ne suis pas sûr que Jeffrey ... optimiseur de requête peut-être l'optimiser, mais il n'y a pas de raison de "sélectionner *" – Albert

0

tout d'abord, je ne recommanderais pas votre préfixer procédure stockée avec sp_. Performance est au moins une des raisons pour lesquelles c'est une mauvaise idée.

Votre procédure stockée a été compilée correctement pour moi. Une autre recommandation serait d'utiliser

if exists (
    select 1 
    from 
     Lotur 
    where 
     L_id= @L_id 
     and @P_sótt between L_hefst and L_pfrest 
) 

par opposition à SELECT *. Avez-vous eu l'erreur en compilant ou en essayant de l'utiliser?

EDIT:

En réponse à votre message au sujet de la levée des erreurs, vous voudrez peut-être regarder RAISERROR. Voici une

+0

Est-ce toujours un problème avec SQL 2005/2008? Cet article que vous avez mentionné date de 2001. –

+0

À mon humble avis, vous ne devriez jamais utiliser sp_ au début de vos propres procédures stockées. SQL Server regardera toujours dans le maître d'abord –

+0

Exécutez le profiler et essayez-le :) Je l'ai trouvé pour être le cas en 2005 - je ne sais pas à propos de 2008 mais je soupçonne la même chose, considérant MS conseiller contre la pratique –