Dichiarare tabella definita utente

sabato 07 novembre 2009 - 09.23

ilario Profilo | Senior Member

ciao
ho creato una tipo tabella definita utente

la devo utilizzare in una store procedura ma non riesco a capire come dichiarala


create PROCEDURE [dbo].[sp_ArticoliVendita_SelCat]
-- Add the parameters for the stored procedure here
@idcategoriemercsub TABELLADEFINITAUTENTE readonly
as
BEGIN

SET NOCOUNT ON;

-- Insert statements for procedure here
select idarticolivendita ,codice,descrizione from articolivendita where idcategoriemercsub in (@idcategoriemercsub) order by descrizione Asc

END


mi da errore dichiarare @idcategoriemercsub

ciao e grazie
ilario

TomClancy Profilo | Junior Member

Ciao Ilario, per quanto ne so ( non molto :P ) dopo @idcategoriemercsub devi indicare il tipo di dato ( data type --> int, varchar etc... )

non capisco quindi cosa intendi per "TABELLADEFINITAUTENTE readonly"

... in linea generale con @idcategoriemercsub stai passando solo un parametro ( nel tuo caso sembrerebbe un ID ... quindi un int smallint ) che poi userai all'interno della stored procedure a tuo piacimento

Ciao
TomClancy

ilario Profilo | Senior Member

ciao

in teoria è un id quindi int , ma come parametro gli passo un tabella intera e non solo un valore
quindi ho creato una tabella definita dall'utente TABELLADEFINITAUTENTE e non riesco a dichiararla nella store procedura

ciao
ilario


TomClancy Profilo | Junior Member

Boh non saprei... tecnicamente non mi risulta possibile passare ad una sp una tabella intera... anche perché non ne capisco il senso.

ti faccio un paio di domande così magari mi faccio un'idea più precisa.

1. perché passi una tabella ad una stored procedure?
2. vuoi passare tutti i campi di questa tabella oppure solo alcuni?
3. vuoi passare tutti i record della tabella o solo alcuni?
4. la tabella che vuoi passare è piena o vuota?
5. stai passandro un id... quindi forse vuoi leggere un record preciso di questa tabella?

... scusami per queste domande ma forse se capisco meglio il fine riuscirò ad esserti maggiormente d'aiuto.

PS: se nel Books On Line vedi il punto dove ti dice che puoi passare una tabella ad una stored procedure potresti mandarmi il link così magari mi documento meglio?

Ciao
TomClancy

ilario Profilo | Senior Member

lo faccio perchè ho un parametro che può contenere diversi valori
in sql2008 si ha la possibilità di passare direttamente una tabella

guarda questi link

SQL Server 2008 risolve definitivamente questo problema introducendo i Table-Valued Parameters:
http://technet.microsoft.com/en-us/library/bb510489.aspx
http://msdn.microsoft.com/en-us/library/bb675163.aspx

ciao
ilario

TomClancy Profilo | Junior Member

ma pensa te... non conoscevo questa possibilità... GRAZIE :)

io risolverei così...

CREATE TYPE TABELLADEFINITAUTENTE AS TABLE ( Idcategoriemercsub INT ) GO CREATE PROCEDURE sp_ArticoliVendita_SelCat @idcategoriemercsub TABELLADEFINITAUTENTE READONLY as BEGIN SET NOCOUNT ON; -- Insert statements for procedure here select idarticolivendita , codice, descrizione from articolivendita inner join @idcategoriemercsub A On A.idcategoriemercsub = articolivendita.idcategoriemercsub order by articolivendita.descrizione Asc END

ilario Profilo | Senior Member

<ma pensa te... non conoscevo questa possibilità... GRAZIE :)

dobbiamo ringraziare ***** lbenaglia ***** sa tutto



grazie mille così funziona bene

non so se è un bug di management studio, ma

questa dichiarazione
@idcategoriemercsub TABELLADEFINITAUTENTE readonly

prima me la dava sbagliata , poi ho chiuso managemente e riaperto e ora è ok non bastava disconnettere e riconettere ma riaprire tutto

ti faccio solo un'ultima domanda ho letto che basta inserire una IN nella select per passare tutti i valori senza usare join del tipo

select idarticolivendita ,codice,descrizione from articolivendita where idcategoriemercsub in (@idcategoriemercsub) order by descrizione Asc
ma non funziona magari ho letto io male o manca qualcosa



grazie ancora






TomClancy Profilo | Junior Member

probabilmente una cosa del tipo

SELECT * FROM products WHERE id IN (SELECT ... FROM ... WHERE...)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5