12/05/2008, 02:47
|
| | Fecha de Ingreso: abril-2008
Mensajes: 6
Antigüedad: 16 años, 8 meses Puntos: 0 | |
Re: Cursor con parámetros en procedimiento almacenado Quizás lo veas mejor con código, el método que utilicé es más o menos este:
CREATE PROCEDURE [dbo].[Prueba]
@Texto1 VARCHAR(20),
@Texto2 VARCHAR(20),
@Texto3 VARCHAR(20)
AS
BEGIN
DECLARE @sSQL NVARCHAR(2048)
DECLARE @sWhere NVARCHAR(1024)
DECLARE @NIF NVARCHAR(14)
DECLARE @Nombre NVARCHAR(40)
DECLARE @Cantidad1 INT
DECLARE @Cantidad2 INT
DECLARE @Cantidad3 INT
-- Tabla temporal que contendrá los registros que vamos a procesar
CREATE TABLE #TablaTmp1 (
ClaveTT1 INT IDENTITY(1,1),
NIF NVARCHAR(14),
Nombre NVARCHAR(40),
)
-- Tabla temporal para guardar los datos calculados
CREATE TABLE #TablaTmp2 (
NIF NVARCHAR(14),
Nombre NVARCHAR(40),
Cantidad1 INT,
Cantidad2 INT,
Cantidad3 INT
)
-- Se calcula la cláusula Where según los parámetros pasados al procedimiento
SET @sWhere = ''
IF @Texto1 <> ''
IF @sWhere <> ''
SET @sWhere = @sWhere + ' AND '
SET @sWhere = '(Texto1 LIKE ''%' + @Texto1 + ''')'
IF @Texto2 <> ''
IF @sWhere <> ''
SET @sWhere = @sWhere + ' AND '
SET @sWhere = '(Texto2 LIKE ''%' + @Texto2 + ''')'
IF @Texto3 <> ''
IF @sWhere <> ''
SET @sWhere = @sWhere + ' AND '
SET @sWhere = '(Texto3 LIKE ''%' + @Texto3 + ''')'
-- Se calcula la cláusula INSERT INTO
SET @sSQL = 'INSERT INTO #TablaTmp1'
SET @sSQL = @sSQL + ' (NIF, Nombre)'
SET @sSQL = @sSQL + ' SELECT NIF, Nombre'
SET @sSQL = @sSQL + ' FROM Personas'
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
EXEC (@sSQL)
-- Bucle que lee los registros de la tabla temporal 1 para hacer los
-- cálculos oportunos y guardar los datos obtenidos en la tabla
-- temporal2
WHILE EXISTS (SELECT ClaveTT1 FROM #TablaTmp1)
BEGIN
SELECT TOP 1
@ClaveTT1 = ClaveTT1,
@NIF = NIF,
@Nombre = Nombre
FROM #TablaTmp1
-- Llamadas a los procedimientos y funciones que realizan los
-- cálculos complejos:
SET @Cantidad1 = FuncionCalculo1(@NIF)
SET @Cantidad2 = FuncionCalculo2(@NIF)
SET @Cantidad3 = FuncionCalculo3(@NIF)
INSERT INTO #TablaTmp2
(NIF, Nombre, Cantidad1, Cantidad2, Cantidad3)
VALUES (
@NIF,
@Nombre,
@Cantidad1,
@Cantidad2,
@Cantidad3
)
DELETE #TablaTmp1
WHERE ClaveTT1 = @ClaveTT1
END
SELECT NIF,
Nombre,
Cantidad1,
Cantidad2,
Cantidad3
FROM #TablaTmp2
ORDER BY NIF
DROP TABLE #TablaTmp2
DROP TABLE #TablaTmp1
RETURN @@ROWCOUNT
END |