Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Ho la seguente query:

    SELECT *
    FROM Tabella
    WHERE Id IN (@ListaId)

    Il campo Id è di tipo intero. La variabile viene passata ad una stored procedure ed è di tipo stringa. Viene restituita da una combobox multipla presente in una form ASP.

    Conterrà quindi ad esempio il seguente valore:

    '1,2,3,4'

    Attualemnte la query non può funzionare perchè il confronto da eseguire è tra un intero ed una stringa. Potrei convertire allora il campo Id in un char ma la stringa passata allora non andrebbe più bene perchè dovrebbe avere il formato:

    '1','2','3','4'

    A qualcuno viene una buona idea?

    Grazie.



  2. #2
    Se ho capito bene hai una stored procedure del tipo

    CREATE PROCEDURE xyz @listaid varchar(100)

    SELECT *
    FROM Tabella
    WHERE [Id] IN (@ListaId)

    allora cambiala in

    CREATE PROCEDURE xyz @listaid int

    SELECT *
    FROM Tabella
    WHERE [Id] IN (@ListaId)

    e cambia la pagina asp in modo che non inserisca nella chiamata a procedura gli apici

  3. #3
    Il problema è che il contenuto di @ListaId è restituito da una listbox (quindi nel formato 1, 2, 3, 4...) ed è una stringa. Se lo trasformo in un intero viene visto come un'unica entità, mentre a me servirebbe che io gli dicessi di confrontarlo con @ListaId a prescindere da quello che sia il suo contenuto.

    Come da te suggerito avevo già provato ma non funziona.
    Il problema però l'hai capito perfettamente!

    Ciao e grazie.





  4. #4
    pensavo che @listaid contenesse un solo parametro.

    invece che passare la stringa nel formato "'1', '2', '3'" passala nel formato "1, 2, 3"

    poi
    codice:
    create procedure xyz @listaId varchar(2000) = NULL AS
    
    declare @wherestr varchar(8000)
    declare @start int
    declare @indx int
    declare @working int
    
    set @start = 1
    set @working = 1
    set @wherestr = ''
    
    if @listaid is null 
    	return
    
    while @working = 1
    begin
    	set @indx = charindex(',', @listaid, @start)
    	if @indx = 0 
    	begin	
    		set @working = 0
    		set @wherestr = @wherestr + ' or [ID] = '  + substring(@listaid, @start,len(@listaid) - @start + 1) 
    	end
    	else
    		set @wherestr = @wherestr + ' or [ID] = '  + substring(@listaid, @start, @indx - @start ) 
    	set @start = @indx + 1
    end
    
    if len(@wherestr) > 0 
    	begin
    		set @wherestr = ' WHERE ' + substring(@wherestr, 5, len(@wherestr) - 4)
    		execute ('SELECT * FROM TABELLA ' + @wherestr)
    		
    	end

  5. #5
    Non l'ho guardata nel dettaglio... ma credo comunqeu che dopo tutto questo codice dovrebbe funzionare. Il bello è che attualmente sta funzionando... ma senza fare tutto ciò. Per lanciare la query utilizzo ADO (Connection, Command, Recordset). Se volessi richiamare la Stored Procedure attraverso una Command di ADO allora dovrei per forza utilizzare del codice simile. Per ora ho risolto scavalcando la command e lanciando attraverso la Connection la query così come l'avevo scritta all'inizio. In questo caso però non posso utilizzare le stored procedure... intanto ASP crea la stringa ed al db arriva già pronta!

    Per ora funziona... a limite appena ho un po' di tempo gli do una modificata.

    Ciao e grazie mille!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.