Consultas dinámicas

03/05/2007 - 11:05 por Fernando Alonso | Informe spam
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero en
tiempo de ejecución en base a la elección del usuario, pero no encuentro la
forma de modificar la select del tableadapter. Obviamente no me vale hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas, ninguna,etc.
 

Leer las respuestas

#1 Jesús López
03/05/2007 - 15:34 | Informe spam
Los table adapters son bastante poco flexibles. Una solución a tu problema
sería utilizar un procedimiento almacenado que construyera la instrucción
select usando sql dinámico en vez de construirla en la aplicación.

Por ejemplo:

CREATE PROCEDURE [SearchCustomer]
@CompanyName nvarchar(40),
@City nvarchar(15),
@Country nvarchar(15)
AS
DECLARE @sql nvarchar(4000)
SET @sql N'SELECT CustomerID, CompanyName, ContactName, ContactTitle,
[Address], City, Region, PostalCode, Country, Phone, Fax
FROM dbo.Customers
WHERE 1=1'
IF @CompanyName IS NOT NULL
SET @sql = @sql + ' AND CompanyName LIKE @CompanyName + ''%'''
IF @City IS NOT NULL
SET @sql = @sql + ' AND City = @City'
IF @Country IS NOT NULL
SET @sql = @sql + ' AND Country = @Country'

EXEC sp_executesql
@sql,
N'@CompanyName nvarchar(40), @City nvarchar(15), @Country nvarchar(15)',
@CompanyName, @City, @Country

Si ejecutas:

exec SearchCustomer NULL, NULL, NULL

Te dará todos los clientes

Si ejecutas:

exec SearchCustomer N'S', NULL, N'USA'

Te dará todos los clientes de USA cuyo CompanyName empieze por S.

Saludos:

Jesús López



"Fernando Alonso" escribió en el
mensaje news:
Hola a todos:
Quiero realizar una query dinámica, es decir la claúsula where la genero
en
tiempo de ejecución en base a la elección del usuario, pero no encuentro
la
forma de modificar la select del tableadapter. Obviamente no me vale
hacerlo
con parámetros, puesto que, a priori, no se cuales van a ser. El usuario
puede utilizar distintas combinaciones de condiciones, todas, ninguna,etc.

Preguntas similares