Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Stored Procedure parametri varchar or int

    Salve, questa è la mia storedprocedure:
    codice:
    USE [***]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Procedure [***].[GetListino] (
    	@IDCP varchar(50)
    )
    AS
    SELECT tblCatProd.Categoria
    FROM tblCatProd
    WHERE (tblCatProd.ID IN (@IDCP) OR @IDCP IS NULL)
    ORDER BY tblCatProd.ID ASC
    Se passo un numero alla variabile @IDCP funziona, ma se ne passo due (ad es. '1, 2') mi dà errore di conversione, sebbene abbia dichiarato la @IDCP come varchar(50).
    Come faccio a far eseguire questa stored procedure anche con più valori per @IDCP?
    Per questo motivo ho messo un "IN" invece che un "=".
    Qualcuno ha già visto sta cosa?
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  2. #2
    Mi rispondo. Ho risolto così:
    codice:
    ALTER Procedure [***].[GetListino] (
    	@IDCP varchar(50)
    
    )
    AS
    SET NOCOUNT ON
    
    DECLARE @strSQL varchar(2000)
    
    SET	@strSQL = 'SELECT tblCatProd.Categoria
    FROM tblCatProd 
    WHERE (tblCatProd.ID IN (' + @IDCP + ') OR '+ @IDCP +' IS NULL) 
    ORDER BY tblCatProd.ID ASC'
    
    EXECUTE(@strSQL)
    
    SET NOCOUNT OFF
    GO
    Ora riesco a passare parametri multipli, ma non funziona più il caso in cui passo il NULL come valore. In questo caso vorrei che la ricerca restituisse tutti i record, ma non funziona. Come mannaggia si fa? :master:
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  3. #3
    Ho risolto componendo la query con degli IF che valutano se le variabili implicate sono NULL oppure no, ma speravo esistesse qualcosa di più "elegante"....
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  4. #4
    per quello che vuoi fare dovresti utilizzare sp_executesql con la generazione "runtime" (nella storedprocedure) della query da eseguire, successivamente la esegui.
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  5. #5
    Originariamente inviato da RoBYCoNTe
    per quello che vuoi fare dovresti utilizzare sp_executesql con la generazione "runtime" (nella storedprocedure) della query da eseguire, successivamente la esegui.
    Perdonami, ma da neofita non ho capito molto cosa intendi dire. Puoi chiarire con un esempio?
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  6. #6

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    16
    Ciao spero di essere di aiuto..

    non capisco perchè devi testare nella query il parametro a null....
    e perche esegui la stringa con l'execute che è molto meno performante della select ( non viene compilato l'execurtion plan e quindi tutte le volte è come sela creassi nuova... )

    comunque se devi farla così pensso che :

    La stored tu la richiami con "[***].[GetListino] 'parametro '" giusto ?
    Quindi non credo che tu possa passare il valore NULL ma più semplicemente '' ( è un varchar ) e poi inserire la clausola

    WHERE (tblCatProd.ID =@IDCP )
    and ( @IDCP = '' OR tblCatProd.ID is null)

    magari gestendo il NULL dal codice che richiama la stored per impostare ''
    tblCatProd.ID è definito come varchar vero ? se è un INT o simile la query si può fare in modo diverso....

    questa la farei così

    ALTER Procedure [***].[GetListino] (
    @IDCP varchar(50)

    )
    AS
    SET NOCOUNT ON

    SELECT tblCatProd.Categoria
    FROM tblCatProd

    WHERE tblCatProd.ID =@IDCP
    and ( @IDCP = '' OR tblCatProd.ID is null)

    ORDER BY tblCatProd.ID ASC'

    EXECUTE(@strSQL)

    SET NOCOUNT OFF


    ciao
    GO

  8. #8
    Ciao,

    come da regolamento, va specificato il nome del database nel titolo, e, mi sembra, che tu non lo abbia specificato nel corpo del messaggio.

    Gentilmente posta il nome della piattaforma del database altrimenti sarò costretto a chiudere.

  9. #9

    SQL Database

    Originariamente inviato da daniele_dll
    Ciao,

    come da regolamento, va specificato il nome del database nel titolo, e, mi sembra, che tu non lo abbia specificato nel corpo del messaggio.

    Gentilmente posta il nome della piattaforma del database altrimenti sarò costretto a chiudere.
    SQL Database, scusa.
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  10. #10
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522

    Re: SQL Database

    Originariamente inviato da freezone
    SQL Database, scusa.
    Non vuol dire niente...

    Immagino si tratti di MS SQL Server... 2000 ? 2005 ? 2008 ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.