Restriccion check en una vista

31/08/2006 - 22:22 por Alfredo Crisostomo | Informe spam
Tengo una vista indexada que me guarda el balance de unas transacciones pero
necesito controlar que ningun balance vaya a quedar negativo.

Se puede agregar una restriccion a la vista para ese objetivo ?

Como se hace?

Preguntas similare

Leer las respuestas

#1 Isaias
31/08/2006 - 22:43 | Informe spam
Alfredo

Si tu vista no es de ACTUALIZACION, entonces no necesitas check alguno.

Si lo que quieres es que al momento de mostrar los datos, no muestre alguno
en cero, eso debes controlarlo en el codigo que generara la vista.

CREATE VIEW myVista
AS
SET NOCOUNT ON
SELECT EMPLEADO, CASE WHEN SUELDO = 0 THEN 1 ELSE SUELDO END AS SUELDO
FROM .
Saludos
IIslas


"Alfredo Crisostomo" wrote:

Tengo una vista indexada que me guarda el balance de unas transacciones pero
necesito controlar que ningun balance vaya a quedar negativo.

Se puede agregar una restriccion a la vista para ese objetivo ?

Como se hace?



Respuesta Responder a este mensaje
#2 Alfredo Crisostomo
31/08/2006 - 23:48 | Informe spam

Si tu vista no es de ACTUALIZACION, entonces no necesitas check alguno.




Es de actualización ya que es una "indexed view" o sea que es como si fuese
una tabla.


Si lo que quieres es que al momento de mostrar los datos, no muestre
alguno
en cero, eso debes controlarlo en el codigo que generara la vista.




No es eso lo que quiero sino que me detecte cuando un balance quede negativo
y me lo rechace.

Si es que se puede con una vista indexada, claro.
Respuesta Responder a este mensaje
#3 Isaias
01/09/2006 - 01:32 | Informe spam
Vuelvo a preguntar, ¿Utilizas tu vista para hacer alguna ACTUALIZACION?

UPDATE MyView SET MyColumna = '20' WHERE MyColumna = '30'

Para eso es tu vista?
Saludos
IIslas


"Alfredo Crisostomo" wrote:

>
> Si tu vista no es de ACTUALIZACION, entonces no necesitas check alguno.
>

Es de actualización ya que es una "indexed view" o sea que es como si fuese
una tabla.


> Si lo que quieres es que al momento de mostrar los datos, no muestre
> alguno
> en cero, eso debes controlarlo en el codigo que generara la vista.
>

No es eso lo que quiero sino que me detecte cuando un balance quede negativo
y me lo rechace.

Si es que se puede con una vista indexada, claro.




Respuesta Responder a este mensaje
#4 DNC
01/09/2006 - 03:24 | Informe spam
Es de actualización ya que es una "indexed view" o sea que es como si
fuese una tabla.



o como una forma de ocultar la complejidad de la consulta subyacente.
lo cual puede mejorar bastante la performance de los select, pero pueden
degradar la performance de las modificaciones de las tablas subyacentes.


use tests
go

create table dbo.estados
( idestado int identity (1,1) not null,
estado varchar (50) not null default ('')
)
go

insert into estados values('uno')
insert into estados values('dos')
insert into estados values('tres')
insert into estados values('cuatro')
insert into estados values('cinco')
go

select idestado, estado from estados
go


CREATE TABLE [CambiosEstados] (
[IdEstadoAnterior] [int] NOT NULL ,
[IdEstadoActual] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL default (getdate())
)
GO

insert into CambiosEstados values(1,2, default)
insert into CambiosEstados values(2,3, default)
insert into CambiosEstados values(3,3, default)
insert into CambiosEstados values(4,3, default)
insert into CambiosEstados values(5,3, default)
go

select * from CambiosEstados
go

create view dbo.uv_verestadouno with schemabinding
as
select idestado, estado from dbo.estados
where estado = 'uno'
with check option
go

create unique clustered index idx_ci_estado on uv_verestadouno (estado)
go

select * from uv_verestadouno
go

update uv_verestadouno
set estado = 'dos'
go

especifica WITH CHECK OPTION o alcanza una vista con esta opción, y una o
más filas resultantes de la operación no se califican con la restricción
CHECK OPTION.


Cordiales Saludos! ,
Diego.-

<!--Enviar Email: Pega esto en un .htm -->
<!-- INICIO -->
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#99;&#111;
&#110;&#116;&#105;&#110;&#64;&#65;&#114;&#103;&#101;&#110;&#116;
&#105;&#110;&#97;&#46;&#99;&#111;&#109;">
Diego N. Contin</a>
<!-- FIN -->
Uso del Foro
http://www.mvp-access.com/rubenvigon/foro/

Este mensaje se proporciona TAL CUAL.
Sin ningun derecho o garantia

The documentation is provided to you "as is" without warranty of any kind.
The entire risk
usage and all it's consequences including data loss and hardware damage are
with you.

"En cuestiones de cultura y de saber, solo se pierde lo que se guarda; solo
se gana lo que se da". Antonio Machado

"Tres cosas que son el deber de todos: escuchar humildemente, responder
discretamente y juzgar bondadosamente."
Tríada celta.

"I wish I'd known that before I started writing all this code."
"Alfredo Crisostomo" escribió en el mensaje
news:
>
Si tu vista no es de ACTUALIZACION, entonces no necesitas check alguno.




Es de actualización ya que es una "indexed view" o sea que es como si
fuese una tabla.


Si lo que quieres es que al momento de mostrar los datos, no muestre
alguno
en cero, eso debes controlarlo en el codigo que generara la vista.




No es eso lo que quiero sino que me detecte cuando un balance quede
negativo y me lo rechace.

Si es que se puede con una vista indexada, claro.



Respuesta Responder a este mensaje
#5 Alfredo Crisostomo
01/09/2006 - 03:35 | Informe spam
Vuelvo a preguntar, ¿Utilizas tu vista para hacer alguna ACTUALIZACION?

UPDATE MyView SET MyColumna = '20' WHERE MyColumna = '30'




No directamente. Se actualiza la tabla origen. La vista (indexada)
almacena un resumen de movimientos.
De la forma (ej.):

CREATE VIEW dbo.vBalPre with schemabinding
AS
SELECT PreNo, SUM(debe) as debe, SUM(haber) as haber, COUNT_BIG (*) AS
CNT
FROM dbo.MovPre
GROUP BY PreNo

Luego tiene una PK Clustered por PreNo

Yo quisiera poner una restriccion que me diga que sum(debe) sea no menor que
sum(haber).
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida