Parametrizzazione

venerdì 17 ottobre 2008 - 12.47

tarabasch84 Profilo | Junior Member

Ciao ragazzi,
vorrei creare una UDF che in base al nome della tabella, della colonna, e del valore passato mi restituisca true/false se il valore passato esiste o meno nella tabella. Lavoro in Sql server 2005. L'istruzione che dovrei parametrizzare è una semplice select:
SELECT @count = count(*) FROM @tablename WHERE @columnname = @value. Ho provaro con l'EXECUTE STRING ma non mi piace tanto e per di più non potrei eseguirlo all'interno della UDF. Avete qualche soluzione?



--
Credo che parte della colpa sia di billy...

gabriel81 Profilo | Junior Member

In pratica vuoi conoscere il numero di righe restituitte da una select?

tarabasch84 Profilo | Junior Member

Beh nel mio caso particolare ti rispondo di si.
Però in realtà la mia è una richiesta un pochino più generica. Supponendo di voler parametrizzare in una SP piuttosto che in una UDF i nomi di tabelle o di colonne come dovrei comportarmi all'interno del batch sql?
--
Credo che parte della colpa sia di billy...

gabriel81 Profilo | Junior Member

Ti faccio un esempio, così forse è meglio:

USE [nomeDb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROC [dbo].[nome_della_sp]

@F_RagSociale nvarchar(50) = '',
@F_Prov nvarchar(2) = '',
@F_PIVA nvarchar(13) = ''

AS
BEGIN
SET NOCOUNT ON;
SELECT [FORNITORE]
,[RagSociale]
,[Localita]

FROM [dbo].[Fornitori]
WHERE RagSociale LIKE '%' + @F_Ragsociale + '%'
AND Prov LIKE '%' + @F_Prov + '%'
AND PIVA LIKE '%' + @F_PIVA + '%'
AND Cancellato = 0

END

Quindi crei i parametri, specifichi il tipo e dimensione e volendo anche un valore di default
Poi crei la struttura del SQL mettendo il nome del parametro al posto del valore.
SQL si preoccupa di mettere o meno gli apici.

lbenaglia Profilo | Guru

>Supponendo di voler parametrizzare in una SP piuttosto che in
>una UDF i nomi di tabelle o di colonne come dovrei comportarmi
>all'interno del batch sql?
Le tabelle e le colonne non sono parametrizzabili a meno di ricorrere al Dynamic SQL, ma agendo in questo modo perdi tutti i vantaggi offerti dalle sp aprendo la strada ad attacchi di SQL Injection.

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

tarabasch84 Profilo | Junior Member

>Le tabelle e le colonne non sono parametrizzabili a meno di ricorrere
>al Dynamic SQL, ma agendo in questo modo perdi tutti i vantaggi
>offerti dalle sp aprendo la strada ad attacchi di SQL Injection.
Escludendo la possibilità di utilizzare il dynamic SQL, mi stati dicendo che non ho altre possibilità lavorando in t-sql ovviamente?
--
Credo che parte della colpa sia di billy...

lbenaglia Profilo | Guru

>Escludendo la possibilità di utilizzare il dynamic SQL, mi stati
>dicendo che non ho altre possibilità lavorando in t-sql ovviamente?
Esatto.

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