+ Rispondi al Thread
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 12 su 12

Discussione: MSSQL Problema conversione tipi

  1. #11
    Sgrubak ora è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    418
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    sp_ExecuteSql è utile per costruire una query dinamicamente
    Infatti! Pensavo ad una cosa tipo:
    codice:
    Declare @a as nvarchar(100)
    Declare @b as nvarchar(20)
    Declare @c as nvarchar(300)
    Declare @sql as nvarchar(max)
    
    Set @a = N'insert into ordiniattuali(cdarst,quantita) select cdarst, '
    Set @b = N'QO' + Format(@currentmonth, '00') + N'ST'
    Set @c = N' from STGA000F 
    			left join mgart00f on STGA000F.cdarst = mgart00f.cdarma  
    			left join coan100f on STGA000F.cdarst = coan100f.cdarcc   
    			where annost =  @currentyear and mgart00f.cla5ma in (''12'',''40'')  
    			and nrfocc = ''03'' and timost in(01,07)'
    
    Set @sql = @a + @b + @c
    
    EXEC sp_executesql @sql
    Certo che se son solo i 12 mesi, molto meglio il Case.

  2. #12
    Luogo
    Lazio
    Post
    1,740
    Blogs
    21
    [QUOTE=Sgrubak;378288]Infatti! Pensavo ad una cosa tipo:
    ...
    [/CODE]
    Certo che si può aggiungendo il ciclo while sui 12 mesi
    ... ma personalmente in genere preferisco senza ciclo tipo così:
    codice:
    use tempdb
    go
    
    -- creo dati di prova
    if OBJECT_ID('dbo.Test') is not null
    drop table dbo.Test 
    go
    
    create table dbo.Test(
      ID int 
     ,C01 varchar(20) 
     ,C02 varchar(20) 
     ,C03 varchar(20) 
     ,C04 varchar(20) 
     ,C05 varchar(20) 
     )
    
    insert into dbo.Test 
    values(1,'C01-1','C02-1','C03-1','C04-1','C05-1')
         ,(2,'C01-2','C02-2','C03-2','C04-2','C05-2')
         ,(3,'C01-3','C02-3','C03-3','C04-3','C05-3')
    
    -- vedo
    select * from dbo.test
    
    ------------------------------
    
    -- tabella di numeri sequenziali che potrebbe anche essere simulata in altri modi
    declare @tNumSeq  table (N integer)
    insert into @tNumSeq values(1),(2),(3),(4),(5)
    
    select 
     T.ID
    ,case S.N
    	when 1 then T.C01
    	when 2 then T.C02
    	when 3 then T.C03
    	when 4 then T.C04
    	when 5 then T.C05
    end as CXX
    from
    dbo.Test T cross join @tNumSeq S
    order by T.ID
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

+ Rispondi al Thread
Pagina 2 di 2 primaprima 12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi