none
utilizzo di stored procedure con parametri table valued RRS feed

  • Domanda

  • Buongiorno a tutti, come da titolo, sto utilizzando sql server 2012 e la possibilità di passare ad una stored un tipo dato tabellare (molto utile siccome da vb faccio uso massiccio di datatable).

    Prendendo spunto dalla pagina http://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspx ho questo codice di UPDATE (tratto proprio dalla pagina stessa):

    UPDATE dbo.Categories
        SET Categories.CategoryName = ec.CategoryName
        FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec
        ON dbo.Categories.CategoryID = ec.CategoryID;

    Il problema è che non riesco a rendere "dinamici" i campi nella mia stored di update  ossia se uso questa sintassi :

    CREATE PROCEDURE usp_UpdateCategories

          (@tvpNewCategories dbo.CategoryTableType READONLY) AS

    BEGIN

    SET @campi='Categories.CategoryName = ec.CategoryName'

    SET @SQL=' UPDATE dbo.Categories SET  ' + @campi + ' FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec  ON dbo.Categories.CategoryID = ec.CategoryID;’

    EXEC sp_executesql @sql

    END

    Ottengo un errore durante l'esecuzione: la varibile @tvpEditedCategories non viene riconosciuta.

    Grazie per qualsiasi consiglio utile !

    martedì 25 febbraio 2014 08:01

Risposte

Tutte le risposte

  • Buongiorno a tutti, come da titolo, sto utilizzando sql server 2012 e la possibilità di passare ad una stored un tipo dato tabellare (molto utile siccome da vb faccio uso massiccio di datatable).

    Prendendo spunto dalla pagina http://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspx ho questo codice di UPDATE (tratto proprio dalla pagina stessa):

    UPDATE dbo.Categories
        SET Categories.CategoryName = ec.CategoryName
        FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec
        ON dbo.Categories.CategoryID = ec.CategoryID;

    Il problema è che non riesco a rendere "dinamici" i campi nella mia stored di update  ossia se uso questa sintassi :

    CREATE PROCEDURE usp_UpdateCategories

          (@tvpNewCategories dbo.CategoryTableType READONLY) AS

    BEGIN

    SET @campi='Categories.CategoryName = ec.CategoryName'

    SET @SQL=' UPDATE dbo.Categories SET  ' + @campi + ' FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec  ON dbo.Categories.CategoryID = ec.CategoryID;’

    EXEC sp_executesql @sql

    END

    Ottengo un errore durante l'esecuzione: la varibile @tvpEditedCategories non viene riconosciuta.

    Grazie per qualsiasi consiglio utile !

    Non ho fatto test con il codice che hai postato, quindi non escludo ci siano altri problemi, ma intanto direi di sistemare il nome della variabile che stai usando perchè sbagliato. 
    giovedì 27 febbraio 2014 17:05
  • Grazie, ma ho risolto passando la query da eseguire (creata in vb) nella stored

    Ciao.

    • Contrassegnato come risposta pol86 venerdì 28 febbraio 2014 07:02
    venerdì 28 febbraio 2014 07:02