Parametrizzare Tabella su cui fare SELECT

domenica 13 gennaio 2008 - 09.19

Teech Profilo | Expert

Stò costruendo un programma che può interfacciarsi a più gestionali diversi. Ogni gestionale ha una struttura del DB ovviamente diversa.
Dalla mia procedura creo dei linked server in base al gestionale che devo utilizzare. Fin qui tutto bene...

Ora vorrei creare delle Stored Procedure che in base ad un parametro facciamo la select su un linked server piuttosto che un altro in modo dinamico. Volevo utilizzare una sorta di case ma non trovo la sintassi corretta.

Praticamente:
Creo la mia Stored Procedure con il parametro:

CREATE PROCEDURE [dbo].[Articoli] @Gestionale as Integer AS
Se il parametro @Gestionale =1 farò una SELECT di questo tipo:

SELECT Codice, Descrizione FROM OPENQUERY (
LS1, 'SELECT CodiceGest1 AS Codice, DescrizioneGest1 AS Descrizione
FROM ArticoliGest1'
)

Se il parametro @Gestionale =2 invece farò:
SELECT Codice, Descrizione FROM OPENQUERY (
LS2, 'SELECT CodiceGest2 AS Codice, DescrizioneGest2 AS Descrizione, CampoA, CampoB
FROM ArticoliGest2'
)
WHERE CampoA='X' AND CampoB>100

e così via...

Quale sintassi devo usare? Ho provato mille cose ma non ho trovato quella giusta... Anche leggendo manuali e cercando in internet non ho trovato nulla...

Grazie Mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

lbenaglia Profilo | Guru

>Quale sintassi devo usare? Ho provato mille cose ma non ho trovato
>quella giusta... Anche leggendo manuali e cercando in internet
>non ho trovato nulla...

Ciao Maurizio,

hai provato con una IF?

USE tempdb; GO CREATE PROCEDURE dbo.up_SelectIF( @SelectID int = 1 ) AS IF @SelectID = 1 SELECT TOP 10 AddressID, AddressLine1 FROM AdventureWorks.Person.Address ELSE IF @SelectID = 2 SELECT TOP 10 FirstName, LastName FROM AdventureWorks.Person.Contact GO EXEC dbo.up_SelectIF 1; /* Output: AddressID AddressLine1 ----------- ------------------------------- 532 #500-75 O'Connor Street 497 #9900 2700 Production Way 29781 00, rue Saint-Lazare 24231 02, place de Fontenoy 19637 035, boulevard du Montparnasse 15671 081, boulevard du Montparnasse 13079 081, boulevard du Montparnasse 21354 084, boulevard du Montparnasse 910 1 Corporate Center Drive 322 1 Mt. Dell Drive (10 row(s) affected) */ EXEC dbo.up_SelectIF 2; /* Output: FirstName LastName ------------ ------------- Gustavo Achong Catherine Abel Kim Abercrombie Humberto Acevedo Pilar Ackerman Frances Adams Margaret Smith Carla Adams Jay Adams Ronald Adina (10 row(s) affected) */ DROP PROCEDURE dbo.up_SelectIF; GO

>Grazie Mille!!!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Teech Profilo | Expert

Ho provato CASE WHEN, usare più Stored in modi diversi, ho letto varie cose per provare a create delle IN LINE TABLE VALUED FUNCTION e non ho nemmeno pensato alla IF...

Grazie mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

Teech Profilo | Expert

Altro problema inerente:
E se volessi fare la stessa cosa su un Inline Table Valued Function?
Mi pare non sia possibile ma forse esistono "trucchi" per bypassare la problematica...
Le Inline Table Valued Function sono utilissime ma più di una SELECT non accettano se non ho capito male...

Grazie dell'aiuto
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

lbenaglia Profilo | Guru

>Le Inline Table Valued Function sono utilissime ma più di una
>SELECT non accettano se non ho capito male...

Ciao Maurizio,

esatto, le Inline Table Valued Function puoi considerarle delle "viste parametriche" pertanto hai tutte le limitazioni delle viste + quelle specifiche per le UDF, quindi non puoi fare quello che chiedi.

>Grazie dell'aiuto
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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