Вы находитесь на странице: 1из 3

Insertar datos en una vista

Hay mucha gente que cree que las vistas en SQL Server son de solo lectura por naturaleza, la
verdad es que no es as, se pueden administrar, dar permisos de insert, select, update y no
importa si las vistas tienen joins, si la consulta se puede resolver, (puede averiguarse a cual de
las tablas del join van los datos) tambin se puede insertar, aqu teneis un ejemplo de como
funciona
use t est
go
cr eat e l ogi n t est wi t h passwor d=' Cont r asea01'
go
cr eat e user t est
go
cr eat e t abl e demoi nser t vi st as( i d i nt i dent i t y( 1, 1) not nul l pr i mar y
key, descr i pci on var char ( 10) )
go
cr eat e vi ew vw_demoi nser t vi st as as sel ect * f r omdemoi nser t vi st as
go
gr ant sel ect on demoi nser t vi st as t o t est
go
set user ' t est '
go
i nser t i nt o demoi nser t vi st as val ues ( ' t est ' )
/ *
Msg 229, Level 14, St at e 5, Li ne 1
The I NSERT per mi ssi on was deni ed on t he obj ect ' demoi nser t vi st as' ,
dat abase ' t est ' , schema ' dbo' .
*/
go
sel ect * f r omdemoi nser t vi st as
go
set user
go
gr ant i nser t on demoi nser t vi st as t o t est
gr ant sel ect , i nser t on vw_demoi nser t vi st as t o t est
go
set user ' t est '
i nser t i nt o demoi nser t vi st as val ues ( ' t est ' )
i nser t i nt o vw_demoi nser t vi st as val ues ( ' t est 2' )
go
Sel ect * f r omdemoi nser t vi st as

Caso de Ejemplo de insert en una vista
Hace unos dias me mandaban este correo.
Hago una consulta a esta tabla
select * from Saldos

La cual me arroja los siguientes resultados
T015_idComercio T015_saldo
201735 0.00
201735 0.00
201735 0.00
201735 0.00
201758 0.00
201758 0.00
201758 0.00

Cree una tabla con la siguiente estructura
create table Activaciones(Cid int, BloqueoB bit, BloqueoV bit, Bloqueo bit)
Realizar un Trigger que se ejecute cada vez que se inserte un nuevo T015_idComercio
De la tabla Saldos , que ese T015_idComercio se inserte mediante el Trigger en la tabla
Activaciones del campo Cid


cr eat e t abl e sal dos ( T015_i dComer ci o i nt , sal do numer i c( 18, 2) )
go
cr eat e t abl e Act i vaci ones( Ci d i nt , Bl oqueoB bi t , Bl oqueoV bi t , Bl oqueo
bi t )
go

cr eat e t r i gger t r _sal dos on sal dos f or i nser t , updat e
as begi n
mer ge i nt o Act i vaci ones as t ar get
usi ng ( sel ect di st i nct t 015_i dcomer ci o f r omi nser t ed) as sour ce on
t ar get . ci d=sour ce. t 015_i dcomer ci o
when not mat ched t hen
i nser t val ues ( sour ce. t 015_i dcomer ci o, 0, 0, 0) ;
end
go
i nser t i nt o sal dos val ues ( 201735 , 0. 00) ,
( 201735 , 0. 00) ,
( 201735 , 0. 00) ,
( 201735 , 0. 00) ,
( 201758 , 0. 00) ,
( 201758 , 0. 00) ,
( 201758 , 0. 00)
Go

sel ect * f r omsal dos
sel ect * f r omAct i vaci ones


Recorriendo rboles

Ayer un amigo me preguntaba por como recorrer un rbol en orden, particularmente
cuando puedes hacer movimientos de hojas completas, y le mand este ejemplo
cr eat e t abl e ar bol ( I D I NT I DENTI TY NOT NULL pr i mar y key,
NAME NVARCHAR( 50) NOT NULl ,
PARENT_I D I NT NULL
) ;

Creada la tabla le insertamos algunos valores a modo de ejemplo

i nser t i nt o ar bol val ues ( ' nodo padr e' , nul l ) , ( ' nodo hi j o A' , 1) , ( ' nodo
hi j o B' , 1) , ( ' nodo hi j o A- A' , 2) , ( ' nodo hi j o A- B' , 2) , ( ' nodo hi j o A-
C' , 2) ;


Y ahora la funcin Recursiva que lo recorre. La primera de las partes indica la
condicin de entrada (where parent_id is null), tras el union all hacemos referencia a
nosotros mismos entrando en modo recursivo, hasta que se acaben los elementos, es
decir hasta llegar a las hojas.

El nico truco est que que aadimos la ruta que vamos recorrriendo, concatenando el
identificador en cada uno de esos pasos recursivos



wi t h Obt ener Ar bol ( I D, NAME, PARENT_I D, r ut a) as
( sel ect f ol der s. I D, f ol der s. NAME, f ol der s. PARENT_I D, cast ( cast ( i d as
var char ) + ' - >' as var char ( 5000) ) r ut a Fr omar bol f ol der s
wher e PARENT_I D i s nul l
uni on ALL
sel ect f . I D, f . NAME, f . PARENT_I D, cast ( r ut a + cast ( f . i d as var char )
+ ' - >' as var char ( 5000) ) f r omar bol f
i nner j oi n Obt ener Ar bol mc on f . PARENT_I D=mc. I D )
sel ect * f r omObt ener Ar bol ORDER BY r ut a

Ahora movemos un nodo de posicin

updat e ar bol set PARENT_I D=3 wher e i d=2

Вам также может понравиться