Definir SP generico para borrar

02/12/2004 - 16:29 por Jose | Informe spam
Hola uno podria hacer un SP generico que al enviarle de parametro un nombre
de tabla y la condicion me haga un DELETE en la tabla indicada de los
registros que cumplen la condicion enviada en parametro ?

Preguntas similare

Leer las respuestas

#16 MAXI
03/12/2004 - 00:15 | Informe spam
Amigoooo, que lindo verte por estos lugares :)

Bueno aca va un ejemplito simple ;)

=
use northwind
go

CONVERT(VARCHAR(10),CHARACTER_MAXIMUM_LENGTH) + '),' FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='CUSTOMERS'
COLUMN_NAME + ') AND' FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='CUSTOMERS'

IF OBJECT_ID('BUSCAR') IS NOT NULL
DROP PROC BUSCAR


CREATE PROC BUSCAR @CustomerID nchar(5),
@CompanyName nvarchar(40),
@ContactName nvarchar(30),
@ContactTitle nvarchar(30),
@Address nvarchar(60),
@City nvarchar(15),
@Region nvarchar(15),
@PostalCode nvarchar(10),
@Country nvarchar(15),
@Phone nvarchar(24),
@Fax nvarchar(24) AS

SELECT * FROM CUSTOMERS WHERE CustomerID= ISNULL(@CustomerID,CustomerID)
AND
CompanyName= ISNULL(@CompanyName,CompanyName) AND
ContactName= ISNULL(@ContactName,ContactName) AND
ContactTitle= ISNULL(@ContactTitle,ContactTitle) AND
Address= ISNULL(@Address,Address) AND
City= ISNULL(@City,City)-- AND
Region= ISNULL(@Region,Region) AND
PostalCode= ISNULL(@PostalCode,PostalCode) AND
Country= ISNULL(@Country,Country) AND
Phone= ISNULL(@Phone,Phone) AND
Fax= ISNULL(@Fax,Fax)


EXEC BUSCAR
@CUSTOMERID=NULL,
@CompanyName = NULL,
@ContactName=NULL,
@ContactTitle=NULL,
@Address=NULL,
@City='LONDON',
@Region=NULL,
@PostalCode=NULL,
@Country=NULL,
@Phone=NULL,
@Fax=NULL



Es muy discutible la forma, pero... antes que Sql desde la aplicacion lo
controlo asi ;)

Un abrazo

pd: la primer parte es un mini codigo que uso para generar todos los param
de los SP sin necesidad de andar tipeando uno por uno ;), lo que hago es
ejecutar esas query y el resultado en formato texto lo copio y pego :), asi
me ahorro mucho codigo y posibles errores.




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"JOSE DAVID GALVIZ M" escribió en el mensaje
news:
Ché Maxi, seguro que quiero ver el código de ejemplo del SP PATRON :)




Ingeniero JOSE DAVID GALVIZ MUÑOZ
Microsoft Certified Application Developer
Desarrollador Cinco Estrellas 4

"Maxi" escribió en el mensaje
news:
Hola, te cuento que es lo que hago yo ;) (es solo una tecnica nomas)

Supongamos este ejemplo (Cabecera - Detalle)

Aca armo asi la cosa

cabecera_I (insert)
cabecera_u (update)
cabecera_d (Delete)

Detalle_i
Detalle_u
Detalle_d

Bien, en la aplicacion entonces los llamo en mi capa de accedo a datos
(DAL Data Access Layer) segun corresponda y dentro de una transaccion.

Con esto logro varias cosas

1) La aplicacion es bien abstracta porque solo debe llamar a los SP del
motor sin importar que hacen estos
2) Seguridad
3) Mantenimiento en el codigo (si mañana pongo un campo nuevo, solo debo
ver los SP y nada mas)

Como veras nunca uso Sql desde las aplicaciones, es mas, ni los querys
dinamicos los hago asi, sino que uso un SP patron (pedidos_tl_o o
pedidos_tl_a) donde basicamente que hace:

1) tiene todos los campos de la BDD a consultar
2) Usa un isnull(@var,campo) o un like para saber como buscar (si queres
paso el codigo de ejemplo para que lo veas)
3) Uno es A y el otro es O porque puede ser (And u OR) entre todos los
campos. Luego si hay algo muy especifico genero el SP en cuestion, pero
con el patron que te comente te aseguro que resolves el 99% de los casos.

Al usuario le aparece una pantalla que carga controles en tiempo de
ejecucion, estos controles no son mas que TextBox y Label que representan
a los campos de la BDD. El usuario llena los que quiere y son los param
que le paso el SP, todo esto con Recordset cuando usaba vb6 y ahora que
estoy migrando a .net lo hago con Dataset.

No se si te hice un lio enorme o te aclare algunas ideas, pero bue...





Salu2
Maxi


"Battle Troll" escribió en el mensaje
news:
Por cierto maestro, ¿en este caso que seria mejor?

¿La solucion que se me ocurrio - un monton de SP's en el servidor para
borrar diferentes filas, una por tabla, y se mandan llamar desde un SP
maestro que es al que llama la aplicacion?

¿O mandarle directamente la instruccion SQL desde, digamos, visual basic
al sql server?
Porque a primera vista pensaria que el SP especifico para esa tabla
seria mas rapido que en lo que sql server analiza, interpreta y compila
la consulta... pero hay muchos pasos intermedios antes de llegar a ese
SP, y ahi la ganancia quizas se pierda...

La mayoria de las preguntas que se nos pudieran ocurrir ya fueron
preguntadas y contestadas anteriormente.
Puedes buscar en los archivos de Usenet a través de Google:
http://groups-beta.google.com/group....es.access
http://groups-beta.google.com/group....sqlserver








email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida