Visualizzazione dei risultati da 1 a 5 su 5

Discussione: sp_executesql

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    27

    sp_executesql

    Ciao a tutti,

    Ho una semplice query in SQL server 2005:

    declare @sql nvarchar(max);
    declare @sqlParamsDef nvarchar(max);
    declare @sqlParamsSet nvarchar(max);
    declare @colore nvarchar(21);
    declare @count int;
    set @count = 1;

    set @sql = 'select @coloreOUT = @Colore1Tub';
    set @sqlParamsDef = '@Colore1Tub nvarchar(21), @coloreOUT nvarchar(21) output';
    set @sqlParamsSet = '@Colore1Tub, @coloreOUT = @colore output';
    exec sp_executesql @sql, @sqlParamsDef, @sqlParamsSet;

    select @count, @colore;

    La quale genera l'errore:
    La query con parametri '(@Colore1Tub nvarchar(21), @coloreOUT nvarchar(21) output)select' prevede il parametro '@coloreOUT', che non è stato specificato.

    Non capisco dove sta l'errore...
    Ho notato che invertendo la dichiarazione dei parametri, inserendo prima @coloreOUT e poi @Colore1Tub, mi genera lo stesso errore riferito però al parametro @Colore1Tub.
    Di conseguenza ne deduco che la procedura si ferma al primo parametro.

    Qualche idea per risolvere il problema?

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Posta un dump della tabella e ciò che vorresti ottenere.

  3. #3
    ad occhio mi pare che prima usi la variabile e poi la setti:

    set @sql = 'select @coloreOUT = @Colore1Tub';
    set @sqlParamsDef = '@Colore1Tub nvarchar(21), @coloreOUT nvarchar(21) output';


    prova cosi:
    set @sqlParamsDef = '@Colore1Tub nvarchar(21), @coloreOUT nvarchar(21) output';
    set @sql = 'select @coloreOUT = @Colore1Tub';

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    27
    Mi spiego meglio: ho una stored procedure che prende in ingresso (oltre ad altri 100 parametri...) il numero dei colori e i colori 1, 2, 3....fino a 9.

    Devo far si che la procedura verifichi il numero di colori inseriti, ovvero:
    se numeroColori = 2, allora colore1, colore2 devono essere valorizzati, mentre gli altri se valorizzati devono essere resettati.

    Ho provato ad utilizzare sp_executesql passandole nomi di parametri dinamici ma genera degli errori che non capisco.

    Questa è la procedura (senza le parti che non ci interessano...)

    create procedure SS_SaccoInsert
    @NumeroColoriTub int,
    @Colore1Tub varchar(21),
    @Colore2Tub varchar(21),
    @Colore3Tub varchar(21),
    @Colore4Tub varchar(21),
    @Colore5Tub varchar(21),
    @Colore6Tub varchar(21),
    @Colore7Tub varchar(21),
    @Colore8Tub varchar(21),
    @Colore9Tub varchar(21)
    as
    begin
    set nocount on;

    declare @error varchar(500);
    declare @colore varchar(21);
    declare @count int;

    set @error = 'Compilare i campi: ';
    set @count = 1;
    while (@count <= 9)
    begin
    set @sql = 'select @coloreOUT = @Colore'+convert(varchar, @count)+Tub';
    set @sqlParamsDef = '@Colore'+convert(varchar, @count)+Tub nvarchar(21), @coloreOUT nvarchar(21) output';
    set @sqlParamsSet = '@Colore'+convert(varchar, @count)+Tub, @coloreOUT = @colore output';
    --qua da errore
    exec sp_executesql @sql, @sqlParamsDef, @sqlParamsSet;

    if @colore = '' and @count <= @NumeroColoriTub
    begin
    set @error = @error + char(13) + 'Colore '+convert(varchar, @count);
    end
    --else if @colore != '' and @count > @NumeroColoriTub
    --begin
    -- qua non da errore ma non funziona un benemerito niente!!! Perche????????
    --declare @sql1 nvarchar(max); set @sql1 = 'set @Colore'+convert(varchar, @count)+'TubOUT = ''''';
    --declare @sql2 nvarchar(max); set @sql2 = '@Colore'+convert(varchar, @count)+'TubOUT varchar(21) output';
    --declare @sql3 nvarchar(max); set @sql3 = '@Colore'+convert(varchar, @count)+'TubOUT = @Colore'+convert(varchar, @count)+'Tub output';
    --execute sp_executesql @sql1, @sql2, @sql3;
    --end
    set @count = @count+1;
    end

    end;

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    27
    Mi spiego meglio: ho una stored procedure che prende in ingresso (oltre ad altri 100 parametri...) il numero dei colori e i colori 1, 2, 3....fino a 9.

    Devo far si che la procedura verifichi il numero di colori inseriti, ovvero:
    se numeroColori = 2, allora colore1, colore2 devono essere valorizzati, mentre gli altri se valorizzati devono essere resettati.

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.