Aydenme con ésta desición:

21/10/2004 - 19:02 por [}-|]Escudero | Informe spam
Desde el punto de vista del desarrollo de software y dado que no soy experto en SQL Server; apenas
si tengo el conocimiento sobre el SQL como lenguage, necesario para obtener los resultados deseados
desde mi aplicación. Me surgió entonces el siguiente dilema, que creo yo, requiere del concepto de
algún experto, por eso acudo a Uds:

La idea básica es utilizar un sp_ para averiguar si una fila de cualquier tabla está referenciada en
otras tablas con el propósito de marcar las filas como bloqueadas en la interfaz de ususario de mi
aplicación. Para ello tengo dos alternativas diseñadas:
*******************************************************
1. Un sp_HasRef, que, de acuerdo con el nombre de la tabla y el ID de la fila consulta la existencia
de referencias en otras tablas asi:

IF (@RowTName = 'MyTabla')
BEGIN
IF EXISTS (SELECT * FROM MyTableRefA WHERE RefID = @RowID)
RETURN 1
ELSE IF EXISTS (SELECT * FROM MyTableRefB WHERE RefID = @RowID)
RETURN 1
ELSE
RETURN 0
END
ELSE IF (@RowTName = 'MyOtherTabla')
...

script se hace un poco extenso y tedioso, adicionalmente, no sé que efectos de rendimiento pueda
tener y es justo qui donde necesito que me ayuden (=P).

*******************************************************
2. Un sp_HasAnyRef Que hace uso de sysobjects, sysreferences, syscolumns y un cursor para determinar
las posibles referencias de un Una fila culquier tabla, no lo pego por que está un poco enrredado y
largo pero supongo que intuyen como lo hago.

que éste sp no se ejecute cuando se invoque desde una cuenta de usuario con derechos restringidos?;
dado que uiliza tablas del systema.


De antemano gracias.
Cordial saludo,
-> Said H. López

Preguntas similare

Leer las respuestas

#1 Maxi
21/10/2004 - 19:51 | Informe spam
Hola, la verdad que es extraño lo que quieres hacer, por lo menos para mi
;-)

Si entre tus tablas has puesto una relacion Foreign Key no deberias
preocuparte por bloquear mucho, ya que no podran borrar a menos que le hayas
indicado la eliminacion en Cascada.

De todas formas el primer codigo por mas que resulte extenso me parece una
buena forma de hacerlo.

Tambien podrias hacer un count porque si decis que un registro puede estar
en mas de una tabla esto quiere decir que puedo unir estas tablas por ese
campo en cuestion. y hacer un count

SELECT COUNT(*) FROM TABLA1 INNER JOIN TABLA2 ON TABLA1.ID = TABLA2.ID
WHERE TABLA1.ID = 'DATO'


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"[}-|]Escudero" escribió en el mensaje
news:O0$
Desde el punto de vista del desarrollo de software y dado que no soy


experto en SQL Server; apenas
si tengo el conocimiento sobre el SQL como lenguage, necesario para


obtener los resultados deseados
desde mi aplicación. Me surgió entonces el siguiente dilema, que creo yo,


requiere del concepto de
algún experto, por eso acudo a Uds:

La idea básica es utilizar un sp_ para averiguar si una fila de cualquier


tabla está referenciada en
otras tablas con el propósito de marcar las filas como bloqueadas en la


interfaz de ususario de mi
aplicación. Para ello tengo dos alternativas diseñadas:
*******************************************************
1. Un sp_HasRef, que, de acuerdo con el nombre de la tabla y el ID de la


fila consulta la existencia
de referencias en otras tablas asi:

IF (@RowTName = 'MyTabla')
BEGIN
IF EXISTS (SELECT * FROM MyTableRefA WHERE RefID = @RowID)
RETURN 1
ELSE IF EXISTS (SELECT * FROM MyTableRefB WHERE RefID = @RowID)
RETURN 1
ELSE
RETURN 0
END


referenciadas.
ELSE IF (@RowTName = 'MyOtherTabla')
...



referencian a X tabla, pero el
script se hace un poco extenso y tedioso, adicionalmente, no sé que


efectos de rendimiento pueda
tener y es justo qui donde necesito que me ayuden (=P).

*******************************************************
2. Un sp_HasAnyRef Que hace uso de sysobjects, sysreferences, syscolumns y


un cursor para determinar
las posibles referencias de un Una fila culquier tabla, no lo pego por que


está un poco enrredado y
largo pero supongo que intuyen como lo hago.



¿existe la posibilidad de
que éste sp no se ejecute cuando se invoque desde una cuenta de usuario


con derechos restringidos?;
dado que uiliza tablas del systema.


De antemano gracias.
Cordial saludo,
-> Said H. López







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
Respuesta Responder a este mensaje
#2 [}-|]Escudero
21/10/2004 - 22:28 | Informe spam
Gracias Maxi,

Pues bién, aclaro mi intención para no dejar impreciones extrañas ;-). El tipo de interfáz que
implemento permite al usuario realizar acciones de Adicion, Edición y Eliminación en un contexto en
el ue varios elementos están relacionados pero a la vista del usuario es una sola cosa (un
documento), el usuario realiza varias operaciónes que podrá deshacer y/o rehacer y solo hasta que
ejecute el comando guardar se sicronizan con el origen de datos (en busca de la usabilidad), lo que
pretendo es marcar en IU las filas no elimnables al momento de la carga, de manera que, el usuario
no intente eliminarlas y esperar a hasta que ejecute el comando guardar para enterarse de ello, lo
cual lo obligaría a retomar el tabajo =(, No es un caso aparentemente muy común pero sucede
frecuentemente, especialmente cuando se inicia la alimentación de un sistema.

Pd. Ya es un voto a favor de la solución 1, y si mencionas que no afectaría al rendimiento, pues va
ganado.

Cordial saludo,
-> Said H. López
"Maxi" escribió en el mensaje
news:
| Hola, la verdad que es extraño lo que quieres hacer, por lo menos para mi
| ;-)
|
| Si entre tus tablas has puesto una relacion Foreign Key no deberias
| preocuparte por bloquear mucho, ya que no podran borrar a menos que le hayas
| indicado la eliminacion en Cascada.
|
| De todas formas el primer codigo por mas que resulte extenso me parece una
| buena forma de hacerlo.
|
| Tambien podrias hacer un count porque si decis que un registro puede estar
| en mas de una tabla esto quiere decir que puedo unir estas tablas por ese
| campo en cuestion. y hacer un count
|
| SELECT COUNT(*) FROM TABLA1 INNER JOIN TABLA2 ON TABLA1.ID = TABLA2.ID
| WHERE TABLA1.ID = 'DATO'
|
| --
|
| Salu2
| --
| Maxi
| Buenos Aires - Argentina
| Desarrollador Microsoft 3 Estrellas .NET
| --
| Nunca consideres el estudio como una obligación sino como
| una oportunidad para penetrar en el bello y maravillosos
| mundo del saber.
| - Albert Einstein
|
|
|
| "[}-|]Escudero" escribió en el mensaje
| news:O0$
| > Desde el punto de vista del desarrollo de software y dado que no soy
| experto en SQL Server; apenas
| > si tengo el conocimiento sobre el SQL como lenguage, necesario para
| obtener los resultados deseados
| > desde mi aplicación. Me surgió entonces el siguiente dilema, que creo yo,
| requiere del concepto de
| > algún experto, por eso acudo a Uds:
| >
| > La idea básica es utilizar un sp_ para averiguar si una fila de cualquier
| tabla está referenciada en
| > otras tablas con el propósito de marcar las filas como bloqueadas en la
| interfaz de ususario de mi
| > aplicación. Para ello tengo dos alternativas diseñadas:
| > *******************************************************
| > 1. Un sp_HasRef, que, de acuerdo con el nombre de la tabla y el ID de la
| fila consulta la existencia
| > de referencias en otras tablas asi:
| >
| > IF (@RowTName = 'MyTabla')
| > BEGIN
| > IF EXISTS (SELECT * FROM MyTableRefA WHERE RefID = @RowID)
| > RETURN 1
| > ELSE IF EXISTS (SELECT * FROM MyTableRefB WHERE RefID = @RowID)
| > RETURN 1
| > ELSE
| > RETURN 0
| > END
| > --Esta desicion se repite para todas la tablas que puedan ser
| referenciadas.
| > ELSE IF (@RowTName = 'MyOtherTabla')
| > ...
| >
| > --Ésta alternativa es palicable dado que sé de antemano que tablas
| referencian a X tabla, pero el
| > script se hace un poco extenso y tedioso, adicionalmente, no sé que
| efectos de rendimiento pueda
| > tener y es justo qui donde necesito que me ayuden (=P).
| >
| > *******************************************************
| > 2. Un sp_HasAnyRef Que hace uso de sysobjects, sysreferences, syscolumns y
| un cursor para determinar
| > las posibles referencias de un Una fila culquier tabla, no lo pego por que
| está un poco enrredado y
| > largo pero supongo que intuyen como lo hago.
| >
| > --Esta laternativa es más cómoda de utilizar pero aqui está mi pregunta:
| ¿existe la posibilidad de
| > que éste sp no se ejecute cuando se invoque desde una cuenta de usuario
| con derechos restringidos?;
| > dado que uiliza tablas del systema.
| >
| >
| > De antemano gracias.
| > Cordial saludo,
| > -> Said H. López
| >
| >
|
|
|
| Outgoing mail is certified Virus Free.
| Checked by AVG anti-virus system (http://www.grisoft.com).
| Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
|
|
Respuesta Responder a este mensaje
#3 Maxi
21/10/2004 - 22:55 | Informe spam
entiendo, pues fijate la otra solucion que te pase, la del count

esa me parece mas simple a la vista y mucho mas eficiente porque haces un
solo SELECT :-)



Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"[}-|]Escudero" escribió en el mensaje
news:uz%
Gracias Maxi,

Pues bién, aclaro mi intención para no dejar impreciones extrañas ;-). El


tipo de interfáz que
implemento permite al usuario realizar acciones de Adicion, Edición y


Eliminación en un contexto en
el ue varios elementos están relacionados pero a la vista del usuario es


una sola cosa (un
documento), el usuario realiza varias operaciónes que podrá deshacer y/o


rehacer y solo hasta que
ejecute el comando guardar se sicronizan con el origen de datos (en busca


de la usabilidad), lo que
pretendo es marcar en IU las filas no elimnables al momento de la carga,


de manera que, el usuario
no intente eliminarlas y esperar a hasta que ejecute el comando guardar


para enterarse de ello, lo
cual lo obligaría a retomar el tabajo =(, No es un caso aparentemente muy


común pero sucede
frecuentemente, especialmente cuando se inicia la alimentación de un


sistema.

Pd. Ya es un voto a favor de la solución 1, y si mencionas que no


afectaría al rendimiento, pues va
ganado.

Cordial saludo,
-> Said H. López
"Maxi" escribió en el mensaje
news:
| Hola, la verdad que es extraño lo que quieres hacer, por lo menos para


mi
| ;-)
|
| Si entre tus tablas has puesto una relacion Foreign Key no deberias
| preocuparte por bloquear mucho, ya que no podran borrar a menos que le


hayas
| indicado la eliminacion en Cascada.
|
| De todas formas el primer codigo por mas que resulte extenso me parece


una
| buena forma de hacerlo.
|
| Tambien podrias hacer un count porque si decis que un registro puede


estar
| en mas de una tabla esto quiere decir que puedo unir estas tablas por


ese
| campo en cuestion. y hacer un count
|
| SELECT COUNT(*) FROM TABLA1 INNER JOIN TABLA2 ON TABLA1.ID = TABLA2.ID
| WHERE TABLA1.ID = 'DATO'
|
| --
|
| Salu2
| --
| Maxi
| Buenos Aires - Argentina
| Desarrollador Microsoft 3 Estrellas .NET
| --
| Nunca consideres el estudio como una obligación sino como
| una oportunidad para penetrar en el bello y maravillosos
| mundo del saber.
| - Albert Einstein
|
|
|
| "[}-|]Escudero" escribió en el mensaje
| news:O0$
| > Desde el punto de vista del desarrollo de software y dado que no soy
| experto en SQL Server; apenas
| > si tengo el conocimiento sobre el SQL como lenguage, necesario para
| obtener los resultados deseados
| > desde mi aplicación. Me surgió entonces el siguiente dilema, que creo


yo,
| requiere del concepto de
| > algún experto, por eso acudo a Uds:
| >
| > La idea básica es utilizar un sp_ para averiguar si una fila de


cualquier
| tabla está referenciada en
| > otras tablas con el propósito de marcar las filas como bloqueadas en


la
| interfaz de ususario de mi
| > aplicación. Para ello tengo dos alternativas diseñadas:
| > *******************************************************
| > 1. Un sp_HasRef, que, de acuerdo con el nombre de la tabla y el ID de


la
| fila consulta la existencia
| > de referencias en otras tablas asi:
| >
| > IF (@RowTName = 'MyTabla')
| > BEGIN
| > IF EXISTS (SELECT * FROM MyTableRefA WHERE RefID = @RowID)
| > RETURN 1
| > ELSE IF EXISTS (SELECT * FROM MyTableRefB WHERE RefID = @RowID)
| > RETURN 1
| > ELSE
| > RETURN 0
| > END
| > --Esta desicion se repite para todas la tablas que puedan ser
| referenciadas.
| > ELSE IF (@RowTName = 'MyOtherTabla')
| > ...
| >
| > --Ésta alternativa es palicable dado que sé de antemano que tablas
| referencian a X tabla, pero el
| > script se hace un poco extenso y tedioso, adicionalmente, no sé que
| efectos de rendimiento pueda
| > tener y es justo qui donde necesito que me ayuden (=P).
| >
| > *******************************************************
| > 2. Un sp_HasAnyRef Que hace uso de sysobjects, sysreferences,


syscolumns y
| un cursor para determinar
| > las posibles referencias de un Una fila culquier tabla, no lo pego por


que
| está un poco enrredado y
| > largo pero supongo que intuyen como lo hago.
| >
| > --Esta laternativa es más cómoda de utilizar pero aqui está mi


pregunta:
| ¿existe la posibilidad de
| > que éste sp no se ejecute cuando se invoque desde una cuenta de


usuario
| con derechos restringidos?;
| > dado que uiliza tablas del systema.
| >
| >
| > De antemano gracias.
| > Cordial saludo,
| > -> Said H. López
| >
| >
|
|
|
| Outgoing mail is certified Virus Free.
| Checked by AVG anti-virus system (http://www.grisoft.com).
| Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
|
|







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
Respuesta Responder a este mensaje
#4 [}-|]Escudero
21/10/2004 - 23:11 | Informe spam
¿Eficiencia?: ¿con respecto a que es manejable?, o, ¿también al rendimiemto?.
de cualquier manera si no hay diferencia en rendimiento; que es lo que yo no sé determinar en este
caso, la utilizaré.

Gracias Maxi,

Cordial saludo,
-> Said H. López
"Maxi" escribió en el mensaje
news:#
| entiendo, pues fijate la otra solucion que te pase, la del count
|
| esa me parece mas simple a la vista y mucho mas eficiente porque haces un
| solo SELECT :-)
|
|
| --
|
| Salu2
| --
| Maxi
| Buenos Aires - Argentina
| Desarrollador Microsoft 3 Estrellas .NET
| --
| Nunca consideres el estudio como una obligación sino como
| una oportunidad para penetrar en el bello y maravillosos
| mundo del saber.
| - Albert Einstein
|
|
|
| "[}-|]Escudero" escribió en el mensaje
| news:uz%
| > Gracias Maxi,
| >
| > Pues bién, aclaro mi intención para no dejar impreciones extrañas ;-). El
| tipo de interfáz que
| > implemento permite al usuario realizar acciones de Adicion, Edición y
| Eliminación en un contexto en
| > el ue varios elementos están relacionados pero a la vista del usuario es
| una sola cosa (un
| > documento), el usuario realiza varias operaciónes que podrá deshacer y/o
| rehacer y solo hasta que
| > ejecute el comando guardar se sicronizan con el origen de datos (en busca
| de la usabilidad), lo que
| > pretendo es marcar en IU las filas no elimnables al momento de la carga,
| de manera que, el usuario
| > no intente eliminarlas y esperar a hasta que ejecute el comando guardar
| para enterarse de ello, lo
| > cual lo obligaría a retomar el tabajo =(, No es un caso aparentemente muy
| común pero sucede
| > frecuentemente, especialmente cuando se inicia la alimentación de un
| sistema.
| >
| > Pd. Ya es un voto a favor de la solución 1, y si mencionas que no
| afectaría al rendimiento, pues va
| > ganado.
| >
| > --
| > Cordial saludo,
| > -> Said H. López
| > "Maxi" escribió en el mensaje
| > news:
| > | Hola, la verdad que es extraño lo que quieres hacer, por lo menos para
| mi
| > | ;-)
| > |
| > | Si entre tus tablas has puesto una relacion Foreign Key no deberias
| > | preocuparte por bloquear mucho, ya que no podran borrar a menos que le
| hayas
| > | indicado la eliminacion en Cascada.
| > |
| > | De todas formas el primer codigo por mas que resulte extenso me parece
| una
| > | buena forma de hacerlo.
| > |
| > | Tambien podrias hacer un count porque si decis que un registro puede
| estar
| > | en mas de una tabla esto quiere decir que puedo unir estas tablas por
| ese
| > | campo en cuestion. y hacer un count
| > |
| > | SELECT COUNT(*) FROM TABLA1 INNER JOIN TABLA2 ON TABLA1.ID = TABLA2.ID
| > | WHERE TABLA1.ID = 'DATO'
| > |
| > | --
| > |
| > | Salu2
| > | --
| > | Maxi
| > | Buenos Aires - Argentina
| > | Desarrollador Microsoft 3 Estrellas .NET
| > | --
| > | Nunca consideres el estudio como una obligación sino como
| > | una oportunidad para penetrar en el bello y maravillosos
| > | mundo del saber.
| > | - Albert Einstein
| > |
| > |
| > |
| > | "[}-|]Escudero" escribió en el mensaje
| > | news:O0$
| > | > Desde el punto de vista del desarrollo de software y dado que no soy
| > | experto en SQL Server; apenas
| > | > si tengo el conocimiento sobre el SQL como lenguage, necesario para
| > | obtener los resultados deseados
| > | > desde mi aplicación. Me surgió entonces el siguiente dilema, que creo
| yo,
| > | requiere del concepto de
| > | > algún experto, por eso acudo a Uds:
| > | >
| > | > La idea básica es utilizar un sp_ para averiguar si una fila de
| cualquier
| > | tabla está referenciada en
| > | > otras tablas con el propósito de marcar las filas como bloqueadas en
| la
| > | interfaz de ususario de mi
| > | > aplicación. Para ello tengo dos alternativas diseñadas:
| > | > *******************************************************
| > | > 1. Un sp_HasRef, que, de acuerdo con el nombre de la tabla y el ID de
| la
| > | fila consulta la existencia
| > | > de referencias en otras tablas asi:
| > | >
| > | > IF (@RowTName = 'MyTabla')
| > | > BEGIN
| > | > IF EXISTS (SELECT * FROM MyTableRefA WHERE RefID = @RowID)
| > | > RETURN 1
| > | > ELSE IF EXISTS (SELECT * FROM MyTableRefB WHERE RefID = @RowID)
| > | > RETURN 1
| > | > ELSE
| > | > RETURN 0
| > | > END
| > | > --Esta desicion se repite para todas la tablas que puedan ser
| > | referenciadas.
| > | > ELSE IF (@RowTName = 'MyOtherTabla')
| > | > ...
| > | >
| > | > --Ésta alternativa es palicable dado que sé de antemano que tablas
| > | referencian a X tabla, pero el
| > | > script se hace un poco extenso y tedioso, adicionalmente, no sé que
| > | efectos de rendimiento pueda
| > | > tener y es justo qui donde necesito que me ayuden (=P).
| > | >
| > | > *******************************************************
| > | > 2. Un sp_HasAnyRef Que hace uso de sysobjects, sysreferences,
| syscolumns y
| > | un cursor para determinar
| > | > las posibles referencias de un Una fila culquier tabla, no lo pego por
| que
| > | está un poco enrredado y
| > | > largo pero supongo que intuyen como lo hago.
| > | >
| > | > --Esta laternativa es más cómoda de utilizar pero aqui está mi
| pregunta:
| > | ¿existe la posibilidad de
| > | > que éste sp no se ejecute cuando se invoque desde una cuenta de
| usuario
| > | con derechos restringidos?;
| > | > dado que uiliza tablas del systema.
| > | >
| > | >
| > | > De antemano gracias.
| > | > Cordial saludo,
| > | > -> Said H. López
| > | >
| > | >
| > |
| > |
| > |
| > | Outgoing mail is certified Virus Free.
| > | Checked by AVG anti-virus system (http://www.grisoft.com).
| > | Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
| > |
| > |
| >
| >
|
|
|
| Outgoing mail is certified Virus Free.
| Checked by AVG anti-virus system (http://www.grisoft.com).
| Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
|
|
Respuesta Responder a este mensaje
#5 [}-|]Escudero
21/10/2004 - 23:25 | Informe spam
Lo siento Maxi, tu post está claro, es que ando un poco atontao, bueno pero valga la alcaración,
¿hacer JOINs entre varias (hasta 8) tablas retorna un resultado mayor que cero aunque no todas las
tabalas contengan referencias?, bueno de cualquier forma la provaré.

Gracias de nuevo.
Cordial saludo,
-> Said H. López
"[}-|]Escudero" escribió en el mensaje
news:es$#
| ¿Eficiencia?: ¿con respecto a que es manejable?, o, ¿también al rendimiemto?.
| de cualquier manera si no hay diferencia en rendimiento; que es lo que yo no sé determinar en este
| caso, la utilizaré.
|
| Gracias Maxi,
|
| --
| Cordial saludo,
| -> Said H. López
| "Maxi" escribió en el mensaje
| news:#
| | entiendo, pues fijate la otra solucion que te pase, la del count
| |
| | esa me parece mas simple a la vista y mucho mas eficiente porque haces un
| | solo SELECT :-)
| |
| |
| | --
| |
| | Salu2
| | --
| | Maxi
| | Buenos Aires - Argentina
| | Desarrollador Microsoft 3 Estrellas .NET
| | --
| | Nunca consideres el estudio como una obligación sino como
| | una oportunidad para penetrar en el bello y maravillosos
| | mundo del saber.
| | - Albert Einstein
| |
| |
| |
| | "[}-|]Escudero" escribió en el mensaje
| | news:uz%
| | > Gracias Maxi,
| | >
| | > Pues bién, aclaro mi intención para no dejar impreciones extrañas ;-). El
| | tipo de interfáz que
| | > implemento permite al usuario realizar acciones de Adicion, Edición y
| | Eliminación en un contexto en
| | > el ue varios elementos están relacionados pero a la vista del usuario es
| | una sola cosa (un
| | > documento), el usuario realiza varias operaciónes que podrá deshacer y/o
| | rehacer y solo hasta que
| | > ejecute el comando guardar se sicronizan con el origen de datos (en busca
| | de la usabilidad), lo que
| | > pretendo es marcar en IU las filas no elimnables al momento de la carga,
| | de manera que, el usuario
| | > no intente eliminarlas y esperar a hasta que ejecute el comando guardar
| | para enterarse de ello, lo
| | > cual lo obligaría a retomar el tabajo =(, No es un caso aparentemente muy
| | común pero sucede
| | > frecuentemente, especialmente cuando se inicia la alimentación de un
| | sistema.
| | >
| | > Pd. Ya es un voto a favor de la solución 1, y si mencionas que no
| | afectaría al rendimiento, pues va
| | > ganado.
| | >
| | > --
| | > Cordial saludo,
| | > -> Said H. López
| | > "Maxi" escribió en el mensaje
| | > news:
| | > | Hola, la verdad que es extraño lo que quieres hacer, por lo menos para
| | mi
| | > | ;-)
| | > |
| | > | Si entre tus tablas has puesto una relacion Foreign Key no deberias
| | > | preocuparte por bloquear mucho, ya que no podran borrar a menos que le
| | hayas
| | > | indicado la eliminacion en Cascada.
| | > |
| | > | De todas formas el primer codigo por mas que resulte extenso me parece
| | una
| | > | buena forma de hacerlo.
| | > |
| | > | Tambien podrias hacer un count porque si decis que un registro puede
| | estar
| | > | en mas de una tabla esto quiere decir que puedo unir estas tablas por
| | ese
| | > | campo en cuestion. y hacer un count
| | > |
| | > | SELECT COUNT(*) FROM TABLA1 INNER JOIN TABLA2 ON TABLA1.ID = TABLA2.ID
| | > | WHERE TABLA1.ID = 'DATO'
| | > |
| | > | --
| | > |
| | > | Salu2
| | > | --
| | > | Maxi
| | > | Buenos Aires - Argentina
| | > | Desarrollador Microsoft 3 Estrellas .NET
| | > | --
| | > | Nunca consideres el estudio como una obligación sino como
| | > | una oportunidad para penetrar en el bello y maravillosos
| | > | mundo del saber.
| | > | - Albert Einstein
| | > |
| | > |
| | > |
| | > | "[}-|]Escudero" escribió en el mensaje
| | > | news:O0$
| | > | > Desde el punto de vista del desarrollo de software y dado que no soy
| | > | experto en SQL Server; apenas
| | > | > si tengo el conocimiento sobre el SQL como lenguage, necesario para
| | > | obtener los resultados deseados
| | > | > desde mi aplicación. Me surgió entonces el siguiente dilema, que creo
| | yo,
| | > | requiere del concepto de
| | > | > algún experto, por eso acudo a Uds:
| | > | >
| | > | > La idea básica es utilizar un sp_ para averiguar si una fila de
| | cualquier
| | > | tabla está referenciada en
| | > | > otras tablas con el propósito de marcar las filas como bloqueadas en
| | la
| | > | interfaz de ususario de mi
| | > | > aplicación. Para ello tengo dos alternativas diseñadas:
| | > | > *******************************************************
| | > | > 1. Un sp_HasRef, que, de acuerdo con el nombre de la tabla y el ID de
| | la
| | > | fila consulta la existencia
| | > | > de referencias en otras tablas asi:
| | > | >
| | > | > IF (@RowTName = 'MyTabla')
| | > | > BEGIN
| | > | > IF EXISTS (SELECT * FROM MyTableRefA WHERE RefID = @RowID)
| | > | > RETURN 1
| | > | > ELSE IF EXISTS (SELECT * FROM MyTableRefB WHERE RefID = @RowID)
| | > | > RETURN 1
| | > | > ELSE
| | > | > RETURN 0
| | > | > END
| | > | > --Esta desicion se repite para todas la tablas que puedan ser
| | > | referenciadas.
| | > | > ELSE IF (@RowTName = 'MyOtherTabla')
| | > | > ...
| | > | >
| | > | > --Ésta alternativa es palicable dado que sé de antemano que tablas
| | > | referencian a X tabla, pero el
| | > | > script se hace un poco extenso y tedioso, adicionalmente, no sé que
| | > | efectos de rendimiento pueda
| | > | > tener y es justo qui donde necesito que me ayuden (=P).
| | > | >
| | > | > *******************************************************
| | > | > 2. Un sp_HasAnyRef Que hace uso de sysobjects, sysreferences,
| | syscolumns y
| | > | un cursor para determinar
| | > | > las posibles referencias de un Una fila culquier tabla, no lo pego por
| | que
| | > | está un poco enrredado y
| | > | > largo pero supongo que intuyen como lo hago.
| | > | >
| | > | > --Esta laternativa es más cómoda de utilizar pero aqui está mi
| | pregunta:
| | > | ¿existe la posibilidad de
| | > | > que éste sp no se ejecute cuando se invoque desde una cuenta de
| | usuario
| | > | con derechos restringidos?;
| | > | > dado que uiliza tablas del systema.
| | > | >
| | > | >
| | > | > De antemano gracias.
| | > | > Cordial saludo,
| | > | > -> Said H. López
| | > | >
| | > | >
| | > |
| | > |
| | > |
| | > | Outgoing mail is certified Virus Free.
| | > | Checked by AVG anti-virus system (http://www.grisoft.com).
| | > | Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
| | > |
| | > |
| | >
| | >
| |
| |
| |
| | Outgoing mail is certified Virus Free.
| | Checked by AVG anti-virus system (http://www.grisoft.com).
| | Version: 6.0.778 / Virus Database: 525 - Release Date: 15/10/2004
| |
| |
|
|
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida