Advertisement
hoscanoa

REPASO FINAL BDA-I

Apr 3rd, 2014
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 24.91 KB | None | 0 0
  1. /*
  2. Pregunta 1
  3. Utilizando Script (OpenRowSet), cargue a esta tabla creada los datos contenidos en el archivo Excel proporcionado por su profesor (04 puntos)
  4. */
  5. use master
  6. go
  7.  
  8. sp_configure 'show advanced options', 1
  9. go
  10. Reconfigure with override
  11. go
  12.  
  13. sp_configure 'Ad Hoc Distributed Queries', 1
  14. go
  15. Reconfigure with override
  16. go
  17.  
  18. exec master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
  19. go
  20.  
  21. exec master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
  22. go
  23.  
  24.  
  25. use Negocios2013
  26. go
  27.  
  28. Select * into TBVenta
  29. from Ventas.pedidoscabe
  30. where IdPedido='99999'
  31. go
  32.  
  33. select * from TBVenta
  34. go
  35.  
  36. insert into TBVenta
  37. Select * from openrowset(
  38.     'Microsoft.ACE.OLEDB.12.0',
  39.     'Excel 12.0; Database=C:\DATA\DatosLC3Noche.xlsx', [Hoja1$])
  40. go
  41.  
  42. select * from TBVenta
  43. go
  44.  
  45. /*
  46. Pregunta 2
  47. Crear un procedimiento que reciba como parámetro el código de cliente, luego utilizando MERGE entre las tablas TBVenta y PedidosCabe, efectúe la operación de Inserción en caso no coincida el id pedido y código de cliente en caso contrario que actualice los campos fecha de entrega, fecha de envio, envio_pedido y cantidad de pedido, dirección del destinatario, ciudad del destinatario y país de destinatario, con valor NULL.Utilice TRY / CATCH y RAISERROR para cuando no exista el parámetro ingresado. (08 puntos)
  48. */
  49.  
  50. create proc Pregunta2
  51. @IdCliente varchar(5)
  52. as
  53. begin
  54.     begin try
  55.         if not exists (Select * from Ventas.clientes C where C.IdCliente=@IdCliente)
  56.             raiserror('No esta registrado el cliente',16,1)
  57.         else
  58.         Begin
  59.             merge TBVenta as target
  60.             using Ventas.pedidoscabe as source
  61.             on (target.idPedido=source.idPedido)
  62.             when matched and Source.idCliente=@IdCliente then
  63.                 update set [FechaEntrega]=Source.[FechaEntrega], [FechaEnvio]=Source.[FechaEnvio],
  64.                 [EnvioPedido]=Source.[EnvioPedido], [CantidaPedido]=Source.[CantidaPedido],
  65.                 [DirDestinatario]=Source.[DirDestinatario], [CiuDestinatario]=Source.[CiuDestinatario],
  66.                 [PaiDestinatario]= NULL
  67.             when not matched  and Source.idCliente=@IdCliente then
  68.                  INSERT VALUES (Source.[IdPedido], Source.[IdCliente], Source.[IdEmpleado], Source.[FechaPedido],
  69.                  Source.[FechaEntrega], Source.[FechaEnvio], Source.[EnvioPedido], Source.[CantidaPedido], Source.[Destinatario],
  70.                  Source.[DirDestinatario], Source.[CiuDestinatario], Source.[RefDestnatario], Source.[DepDestinatario],
  71.                  Source.[PaiDestinatario]);
  72.         End
  73.     end try
  74.     begin catch
  75.         if ERROR_NUMBER()=50000
  76.             print error_message()
  77.     end catch
  78. end
  79. go
  80.  
  81. exec Pregunta2 'SPLIR'
  82. go
  83.  
  84.  
  85. /*
  86. Pregunta 3
  87. Crear una función de tabla en línea que devuelva el año de la fecha de pedido, nombre del Empleado, idPedido y el monto total del pedido. Utilice Cube o RollUp. (04 puntos)*/
  88. create function Pregunta3()
  89. returns table
  90. as
  91.     return (select isnull(cast(PC.FechaPedido as varchar(15)),replicate('*',15)) [Fecha Pedido],
  92.                    isnull(E.NomEmpleado, replicate('*',15) ) [Nombre de Empleado],  
  93.                     isnull(cast(PC.IdPedido as varchar(15)),  '*** TOTAL ***') [IdPedido],     
  94.                    (PD.Cantidad*PD.PrecioUnidad-PD.Descuento) as [Monto]       
  95.             from RRHH.empleados E inner join  Ventas.pedidoscabe PC
  96.             on E.IdEmpleado=PC.IdEmpleado inner join Ventas.pedidosdeta PD
  97.             on PC.IdPedido=PD.IdPedido
  98.             group by PC.FechaPedido, E.NomEmpleado, PC.IdPedido, PD.Cantidad, PD.PrecioUnidad, PD.Descuento with cube)
  99. go
  100.  
  101. select * from Pregunta3()
  102. go
  103.  
  104. /*
  105. Pregunta 4
  106. Crear un procedimiento que reciba como parámetro el Id del cliente y que permita devolver un el nombre del cliente, el año y la relación de ID de pedidos que efectuó, así como el monto total de las ventas. Utilice un cursor. (04 puntos)
  107. */
  108.  
  109. create proc Pregunta4
  110. @IdCliente varchar(5)
  111. as
  112. begin
  113.     declare @vc_nc varchar(40), @vc_anhio smallint, @vc_idPedido int, @vc_totalVenta money
  114.  
  115.     declare miCursor cursor for select C.NomCliente, Year(PC.FechaPedido) as [Año], PC.IdPedido, sum(PD.Cantidad*PD.PrecioUnidad-PD.Descuento) as [Total]
  116.                                 from Ventas.clientes C inner join Ventas.pedidoscabe PC
  117.                                 on C.IdCliente=PC.IdCliente inner join Ventas.pedidosdeta PD
  118.                                 on PC.IdPedido=PD.IdPedido where C.IdCliente=@IdCliente
  119.                                 group by PC.IdPedido, C.NomCliente, PC.FechaPedido
  120.  
  121.     open miCursor
  122.     fetch next from miCursor into @vc_nc, @vc_anhio, @vc_idPedido, @vc_totalVenta
  123.  
  124.     while @@FETCH_STATUS=0
  125.     Begin
  126.         print 'Nombre del cliente: '+@vc_nc
  127.         print 'Año de pedido     : '+ Convert(Varchar(4), @vc_anhio)
  128.         print 'Id de Pedido      :'+ Convert(Varchar(5), @vc_idPedido)
  129.         print 'Monto Total       :'+ Convert(Varchar(8), @vc_totalVenta)
  130.         print '**********************************************************************'
  131.  
  132.         fetch next from miCursor into @vc_nc, @vc_anhio, @vc_idPedido, @vc_totalVenta
  133.     End
  134.  
  135.     close miCursor
  136.     deallocate miCursor
  137.  
  138. end
  139. go
  140.  
  141. exec Pregunta4 'WILMK'
  142. go
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. --Transacciones
  156. use Negocios2013
  157. go
  158.  
  159. insert Ventas.paises
  160. Values
  161. ('95','Malasia')
  162. go
  163.  
  164. select * from Ventas.paises
  165.  
  166. Rollback
  167.  
  168.  
  169. /***Transaccion Explícita****/
  170. Begin Tran Tranns01
  171.     insert Ventas.paises
  172.     Values
  173.     ('94','Noruega');
  174.  
  175. select * from Ventas.paises
  176.  
  177. /*Deshacemos la transaccion*/
  178. Rollback Tran Tranns01
  179.  
  180.  
  181.  
  182.  
  183. /***Transaccion Explícita - Confirmada****/
  184. Begin Tran Tranns01
  185.     insert Ventas.paises
  186.     Values
  187.     ('94','Noruega');
  188.  
  189. commit Tran Transs01
  190.  
  191. select * from Ventas.paises
  192.  
  193. /*Deshacemos la transaccion*/
  194. Rollback Tran Tranns01
  195.  
  196.  
  197.  
  198.  
  199. /***Transaccion Explícita con Marca***/
  200. Begin Tran Tranns01 with mark 'Marca25032234'
  201.     insert Ventas.paises
  202.     Values
  203.     ('93','Australia'),
  204.     ('92','Holanda');
  205.  
  206. commit tran Tranns01
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222. --XML
  223. use Negocios2013
  224. go
  225.  
  226. select * from Ventas.pedidoscabe
  227. for xml auto
  228. go
  229.  
  230.  
  231. select C.NomCliente, P.IdPedido, P.FechaPedido
  232. from Ventas.pedidoscabe P inner join Ventas.clientes C
  233. on P.IdCliente=C.IdCliente
  234. for xml auto
  235. go
  236.  
  237. select C.NomCliente, P.IdPedido, P.FechaPedido
  238. from Ventas.pedidoscabe P inner join Ventas.clientes C
  239. on P.IdCliente=C.IdCliente
  240. for xml raw
  241. go
  242.  
  243.  
  244. /************************/
  245. /*Creando tabla con campo XML*/
  246. CREATE TABLE DeudasXTienda
  247. (
  248.     id int primary key,
  249.     detalleDeuda XML not null
  250. )
  251. go
  252.  
  253. /*Insertando datos XML*/
  254.  
  255. insert into DeudasXTienda
  256. select 1, detalleDeuda
  257.         from (select *
  258.             from openrowset
  259.                 (bulk 'C:\Data\Cliente.xml', single_blob)
  260.             AS detalleDeuda) as R(detalleDeuda)
  261. go
  262.  
  263.  
  264. insert into DeudasXTienda
  265. select 2, detalleDeuda
  266.         from (select *
  267.             from openrowset
  268.                 (bulk 'C:\Data\ClienteSurco.xml', single_blob)
  269.             AS detalleDeuda) as R(detalleDeuda)
  270. go
  271.  
  272.  
  273. select * from DeudasXTienda
  274.  
  275.  
  276. /******************************************/
  277.  
  278. CREATE XML SCHEMA COLLECTION schemaFactura
  279. AS
  280. N'<?xml version="1.0" ?>
  281.   <xsd:schema
  282.   targetNamespace="http://schemas.mi_base.com/schema1"
  283.   xmlns="http://schemas. mi_base.com/schema1" elementFormDefault="qualified" attributeFormDefault="unqualified"
  284.   xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
  285.   <xsd:element name="Pedido">
  286.   <xsd:complexType>
  287.   <xsd:sequence>
  288.   <xsd:element name="Numero" type="xsd:string"   minOccurs="1" maxOccurs="1"/>
  289.   <xsd:element name="Cliente" type="xsd:string"   minOccurs="1" maxOccurs="1"/>
  290.   <xsd:element name="Importe" type="xsd:int"   minOccurs="1" maxOccurs="1"/>
  291.   </xsd:sequence>
  292.   </xsd:complexType>
  293.   </xsd:element>
  294.   </xsd:schema>'
  295.  
  296.  
  297. CREATE TABLE Factura (IdPedido int, Pedido xml (schemaFactura))
  298. Go
  299.  
  300. INSERT INTO Factura VALUES
  301. (1, '<?xml version="1.0" ?>
  302. <Pedido xmlns="http://schemas.mi_base.com/schema1">
  303. <Numero>2231-AX</Numero>
  304. <Cliente>Microsoft</Cliente>
  305. <Importe>250</Importe>
  306. </Pedido>')
  307. Go
  308.  
  309. Select * from Factura
  310. Go
  311.  
  312.  
  313. /****************/
  314. create XML SCHEMA COLLECTION schemaAlumno
  315. AS
  316. N'<?xml version="1.0" ?>
  317.   <xsd:schema
  318.   targetNamespace="http://schemas.mi_base.com/schema2"
  319.   xmlns="http://schemas. mi_base.com/schema2" elementFormDefault="qualified" attributeFormDefault="unqualified"
  320.   xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
  321.   <xsd:element name="Alumnos">
  322.   <xsd:complexType>
  323.   <xsd:sequence>
  324.   <xsd:element name="codigo" type="xsd:string"   minOccurs="1" maxOccurs="1"/>
  325.   <xsd:element name="nombre" type="xsd:string"   minOccurs="1" maxOccurs="1"/>
  326.   <xsd:element name="apePat" type="xsd:string"   minOccurs="1" maxOccurs="1"/>
  327.   <xsd:element name="apeMat" type="xsd:string"   minOccurs="1" maxOccurs="1"/>
  328.   <xsd:element name="f_nac" type="xsd:date"   minOccurs="1" maxOccurs="1"/>
  329.   </xsd:sequence>
  330.   </xsd:complexType>
  331.   </xsd:element>
  332.   </xsd:schema>'
  333.  
  334.  
  335. CREATE TABLE Alumno (IdAlumno int, Alumnos xml (schemaAlumno))
  336. Go
  337.  
  338. INSERT INTO Alumno VALUES
  339. (1, '<?xml version="1.0" ?>
  340. <Alumnos xmlns="http://schemas.mi_base.com/schema2">
  341. <codigo>A201310358</codigo>
  342. <nombre>Hernán</nombre>
  343. <apePat>Oscanoa</apePat>
  344. <apeMat>Ventocilla</apeMat>
  345. <f_nac>1985-12-02</f_nac>
  346. </Alumnos>
  347. <Alumnos xmlns="http://schemas.mi_base.com/schema2">
  348. <codigo>A201341236</codigo>
  349. <nombre>Sophia</nombre>
  350. <apePat>Castro</apePat>
  351. <apeMat>Romero</apeMat>
  352. <f_nac>1988-11-23</f_nac>
  353. </Alumnos>')
  354. Go
  355.  
  356. Select * from Alumno
  357. Go
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368. --Backup
  369. USE MASTER
  370. GO
  371.  
  372.  
  373. /******BACKUP FULL*****/
  374.  
  375. backup Database [Neptuno]
  376. to disk ='C:\BACKUP\BKFULLNeptuno1930.bak'
  377. With Init, Format
  378.  
  379. backup Database [Negocios2013]
  380. to disk ='C:\BACKUP\BKFULLNegocios20131930.bak'
  381. go
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. /******BACKUP Differential*****/
  395. --Creando BK FULL
  396. backup Database [Neptuno]
  397. To disk='C:\BACKUP\BKFULLNeptuno1950.bak'
  398. With Init, Format
  399.  
  400. --Abrir la BD
  401. use Neptuno
  402. go
  403.  
  404. --Creando Tabla01
  405. create table MyTabla01
  406. (
  407.     id int,
  408.     nom char(50)
  409. )
  410. Go
  411.  
  412. --llenar datos
  413. Declare @c int = 1
  414. While @c<=100
  415. Begin
  416.     Insert Into MyTabla01
  417.     Values
  418.     (@c, 'Sandra'+Cast(@c as varchar(30)))
  419.     set @c=@c+1
  420. End
  421. GO
  422.  
  423. -- Visualiza la tabla
  424. Select * from MyTabla01
  425. GO
  426.  
  427.  
  428.  
  429. --BK differential
  430. use MASTER
  431. GO
  432.  
  433. backup Database [Neptuno]
  434. to Disk = 'C:\BACKUP\BKDiff_1_Neptuno2000.bak'
  435. With Differential
  436. GO
  437.  
  438.  
  439. --Creando Tabla02
  440. create table MyTabla02
  441. (
  442.     id int,
  443.     nom char(50)
  444. )
  445. Go
  446.  
  447. --llenar datos
  448. Declare @c int = 1
  449. While @c<=100
  450. Begin
  451.     Insert Into MyTabla02
  452.     Values
  453.     (@c, 'Koko'+Cast(@c as varchar(30)))
  454.     set @c=@c+1
  455. End
  456. GO
  457.  
  458. -- Visualiza la tabla
  459. Select * from MyTabla02
  460. GO
  461.  
  462.  
  463. drop table MyTabla01
  464. Go
  465.  
  466.  
  467. use MASTER
  468. GO
  469.  
  470. backup Database [Neptuno]
  471. to disk='C:\BACKUP\BKDiff_2_Neptuno2006.bak'
  472. with differential
  473. go
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485. /**** Backup Log Transaction ****/
  486.  
  487. use Master
  488. Go
  489.  
  490.  
  491. ---Backup Full
  492. Backup Database [Negocios2013]
  493. to disk = 'C:\BACKUP\Negocios2017.bak'
  494. Go
  495.  
  496.  
  497. --Relizar transacciones en la abla paises
  498. --de la base de datos Negocios2013
  499. use Negocios2013
  500. GO
  501.  
  502. Select * from Ventas.paises
  503. GO
  504.  
  505. Insert Ventas.paises
  506. Values
  507. ('200','Australia'),
  508. ('201','Lusitania'),
  509. ('202','Mongolia')
  510. go
  511.  
  512.  
  513. --Creando el primer Backup log
  514. use Master
  515. Go
  516.  
  517. Backup Log [Negocios2013]
  518. to disk = 'C:\BACKUP\BKLogNegocios2025.trn'
  519. with init
  520. Go
  521.  
  522.  
  523. use Negocios2013
  524. GO
  525.  
  526. Insert Ventas.paises
  527. Values
  528. ('300','Bélgica'),
  529. ('301','Grecia'),
  530. ('302','Turquía')
  531. go
  532.  
  533.  
  534. --Creando el segundo Backup log
  535. use Master
  536. Go
  537.  
  538. Backup Log [Negocios2013]
  539. to disk = 'C:\BACKUP\BKLog_2_Negocios2030.trn'
  540. --with init  es al primero
  541. Go
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552. --Configurar compress de backup
  553. EXEC sys.sp_configure N'backup compression default', N'1'
  554. Go
  555. Reconfigure with override
  556. Go
  557.  
  558. --Creando un backup comprimido
  559. backup database [Neptuno]
  560. to disk = 'C:\BACKUP\BKFullCompressNeptuno2120.bak'
  561. with Compression, format
  562. go
  563.  
  564.  
  565.  
  566. --dispositivo de seguridad
  567. USE [master]
  568. GO
  569. EXEC master.dbo.sp_addumpdevice  
  570. @devtype = N'disk',
  571. @logicalname = N'BKFullDeviceNeptuno',
  572. @physicalname = N'C:\BACKUP\BKFullDeviceNeptuno.bak'
  573. GO
  574.  
  575.  
  576. --
  577. Backup Database [Neptuno]
  578. to [BKFullDeviceNeptuno]
  579. go
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586. --en ojetos de servidor(menu lateral)
  587. --dispositivo de seguridad
  588. USE [master]
  589. GO
  590. EXEC master.dbo.sp_addumpdevice  
  591. @devtype = N'disk',
  592. @logicalname = N'BKFullDeviceNeptunoMirror',
  593. @physicalname = N'C:\BACKUP\BKFullDeviceNeptunoMirror.bak'
  594. GO
  595.  
  596.  
  597. --backup con Mirror
  598. Backup Database [Neptuno]
  599. to [BKFullDeviceNeptuno]
  600. Mirror to [BKFullDeviceNeptunoMirror]
  601. with Format, Checksum
  602. Go
  603.  
  604.  
  605. --Estrategia de verificación de backup
  606. Restore verifyonly from [BKFullDeviceNeptuno]
  607. GO
  608.  
  609. --Solo para verificar
  610. Restore verifyonly from disk = 'C:\BACKUP\BKFULLNegocios1933.bak'
  611. go
  612.  
  613.  
  614.  
  615.  
  616. /**** Restaurando base de datos ***/
  617.  
  618. Restore Database [Neptuno]
  619. from Disk = 'C:\BACKUP\BKFULLNeptuno1930.bak'
  620. with Replace
  621. GO
  622. --Se debe de poner with replace sino reclama tabla en uso
  623.  
  624.  
  625. /**
  626. Restaurando en una base de datos temporal
  627. **/
  628. --se recupera con otro nombre para ver si contiene lo necesario
  629. --los nombres de los archivos se ve en las propiedades de la base
  630. --de datos
  631. Restore Database [NeptunoTesting]
  632. from Disk = 'C:\BACKUP\BKFULLNeptuno1930.bak'
  633. with Restricted_user,
  634. File=1,
  635. Move 'Neptuno_dat' to 'C:\FileTemp\Neptuno.mdf',
  636. Move 'Neptuno_log' to 'C:\FileTemp\NeptunoLog.ldf'
  637. GO
  638.  
  639.  
  640.  
  641.  
  642. /****/
  643. Restore Database [Neptuno]
  644. from Disk = 'C:\BACKUP\BKFULLNeptuno1950.bak'
  645. with norecovery, replace
  646. GO
  647.  
  648.  
  649. Restore Database [Neptuno]
  650. From  Disk = 'C:\BACKUP\BKDiff_2_Neptuno2006.bak'
  651. with recovery
  652. GO
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661. /*******/
  662. --restaurando un backup log
  663. Restore Database [Negocios2013]
  664. from disk = 'C:\BACKUP\Negocios2017.bak'
  665. with norecovery, replace
  666. GO
  667.  
  668. Restore log [Negocios2013]
  669. from disk = 'C:\BACKUP\BKLogNegocios2025.trn'
  670. With recovery
  671. GO
  672.  
  673.  
  674.  
  675.  
  676.  
  677. /*******/
  678. --restaurando un backup log
  679. Restore Database [Negocios2013]
  680. from disk = 'C:\BACKUP\Negocios2017.bak'
  681. with norecovery, replace
  682. GO
  683.  
  684. Restore log [Negocios2013]
  685. from disk = 'C:\BACKUP\BKLogNegocios2025.trn'
  686. With norecovery
  687. GO
  688.  
  689. Restore log [Negocios2013]
  690. from disk = 'C:\BACKUP\BKLog_2_Negocios2030.trn'
  691. With recovery
  692. GO
  693.  
  694.  
  695.  
  696.  
  697.  
  698. /****************************/
  699. /*REPASO*/
  700. use Negocios2013
  701. go
  702.  
  703. select * into #TempCliente
  704. from Ventas.clientes
  705. where IdCliente='XXX'
  706. go
  707.  
  708. select * from #TempCliente
  709. go
  710.  
  711. insert #TempCliente
  712. Select * from Ventas.clientes
  713. where NomCliente like '[AEIOU]%'
  714. go
  715.  
  716. select * from #TempCliente
  717. go
  718.  
  719. Create table #Vendedor
  720. (
  721.         id_ven char(5) not null,
  722.         nom_ven varchar(25) not null,
  723.         sue_ven money,
  724.         dir_ven varchar(25) not null
  725. )
  726. go
  727.  
  728. bulk insert #Vendedor
  729. from 'C:\BDS\VendedorPlano.txt'
  730. with(
  731.     fieldterminator=',',
  732.     firstrow=2,
  733.     rowterminator='\n'
  734. )
  735. go
  736.  
  737. select * from #Vendedor
  738. Go
  739.  
  740.  
  741. use master
  742. go
  743.  
  744.  
  745. sp_configure 'show advanced options', 1
  746. go
  747. Reconfigure with override
  748. go
  749.  
  750. sp_configure 'Ad Hoc Distributed Queries', 1
  751. go
  752. Reconfigure with override
  753. go
  754.  
  755. exec master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
  756. go
  757.  
  758. exec master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
  759. go
  760.  
  761.  
  762. use Negocios2013
  763. go
  764.  
  765. Create table tbServicios
  766. (
  767.         id_ven char(5) not null,
  768.         nom_ven varchar(25) not null,
  769.         sue_ven money,
  770. )
  771. go
  772.  
  773. select * from tbServicios
  774. go
  775.  
  776. insert into tbServicios
  777. Select * from openrowset(
  778.     'Microsoft.ACE.OLEDB.12.0',
  779.     'Excel 12.0; Database=C:\BDS\Libro.xlsx', [Hoja1$])
  780. go
  781.  
  782.  
  783. *Eliminación*/
  784.  
  785. select * into Customers
  786. from Ventas.clientes
  787. go
  788.  
  789. select * into Ciudad
  790. from  RRHH.Distritos
  791. go
  792.  
  793. --------------------------
  794.  
  795. select * from Customers
  796.  
  797. select * from ciudad
  798.  
  799. -----
  800.  
  801. alter table Customers
  802. Add primary key (IdCliente)
  803. go
  804.  
  805. alter table Ciudad
  806. Add primary key (IdDistrito)
  807. go
  808.  
  809. -----
  810. select * into Country
  811. from Ventas.paises
  812. go
  813. ---
  814. alter table Country
  815. add primary key (IdPais)
  816. go
  817.  
  818. alter table Customers
  819. add foreign key (idpais)
  820. References Country
  821. go
  822.  
  823.  
  824.  
  825. /*----------------------------*/
  826. select * from Customers
  827. select * from Country
  828.  
  829. ---------------
  830. Delete From Country
  831. Where IdPais='002'
  832. go
  833.  
  834. ---Modificar la restricion FK
  835. alter table Customers
  836. drop constraint [FK__Customers__idpai__34C8D9D1]
  837. go
  838.  
  839. ---Foranea
  840. Alter Table customers
  841. Add foreign key (idpais)
  842. references country
  843. on delete Cascade
  844. go
  845.  
  846.  
  847. /*-----------------------------------*/
  848. Create table TBPersona
  849. (
  850.         idper int identity,
  851.         nomper varchar(50)
  852. )
  853. go
  854.  
  855. print @@identity
  856.  
  857.  
  858. /*---*/
  859. Insert TBPersona
  860. Select NomCliente
  861. from customers
  862. go
  863.  
  864.  
  865. --
  866. select * from TBPersona
  867. go
  868.  
  869. Delete from TBPersona
  870. go
  871.  
  872. truncate table TBpersona
  873. go
  874.  
  875.  
  876.  
  877.  
  878. Declare @pais varchar(50), @id char(3)
  879. set @pais='NiXeria'
  880. set @id='99'
  881. Merge Ventas.paises as target
  882. using (select @id, @pais) as source (idpais, nombrepais)
  883. on (target.idpais=source.idpais)
  884. when matched then
  885.     update set nombrepais=source.nombrepais
  886. when not matched then
  887.     insert values (source.idpais, source.nombrepais);
  888.  
  889. SELECT * FROM VENTAS.paises
  890. GO
  891.  
  892. /*------------------------*/
  893.  
  894. SELECT * into Produ
  895. FROM Compras.productos
  896. WHERE idproducto=0
  897.  
  898.  
  899. select * from Compras.productos
  900. select * from produ
  901.  
  902.  
  903. merge produ as target
  904. using Compras.productos as source
  905. on (target.idproducto=source.idproducto)
  906. when matched then
  907.     update set [precioUnidad]=0, [UnidadesEnExistencia]=0, [UnidadesEnPedido]=0
  908. when not matched then
  909.      INSERT VALUES (Source.[IdProducto], Source.[NomProducto], Source.[IdProveedor], Source.[IdCategoria], Source.[CantxUnidad], Source.[PrecioUnidad], Source.[UnidadesEnExistencia], Source.[UnidadesEnPedido]);
  910.  
  911. insert Produ values
  912. (80, 'arroz', NULL,NULL,2,      0,      0,      0)
  913. go
  914.  
  915.  
  916.  
  917. merge produ as target
  918. using Compras.productos as source
  919. on (target.idproducto=source.idproducto)
  920. When  MATCHED THEN
  921.         UPDATE SET [precioUnidad]=0, [UnidadesEnExistencia]=0, [UnidadesEnPedido]=0
  922. WHEN NOT MATCHED By Source THEN
  923.         DELETE;
  924.  
  925.  
  926.  
  927. /************************************/
  928. select top 10 percent *
  929. from Compras.productos
  930. order by PrecioUnidad asc
  931. go
  932.  
  933.  
  934.  
  935. /*
  936. dos tipos de funciones
  937. *del sistema
  938. *definidas por el usuario
  939.     -Escalares
  940.     -Tablas en lineas
  941.     -Multisentencias   
  942. */ 
  943.  
  944. USE Negocios2013
  945. GO
  946.  
  947. --Creando una funcion escalar
  948. create function dbo.fnCalculoCom(@p_monto Money, @p_porcentaje numeric(6,3))
  949. Returns Money
  950. As
  951. Begin
  952.     Declare @v_resultado Money
  953.     Set @v_resultado=@p_monto*@p_porcentaje/100
  954.     Return @v_resultado
  955. End
  956. Go
  957.  
  958. --Utilizando la función escalar
  959. Print dbo.fnCalculoCom(1000,15)
  960.  
  961.  
  962. --Utilizando la fución escalar dentro de una consulta
  963. Select
  964. P.IdPedido,
  965. E.NomEmpleado,
  966. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  967. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision
  968. From Ventas.pedidoscabe P join RRHH.empleados E
  969. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  970. on P.IdPedido=D.IdPedido
  971. Where Year(P.FechaPedido)=2010
  972. group by P.IdPedido,
  973.     E.NomEmpleado
  974. go
  975.  
  976.  
  977. create function dbo.fnConcat(@p_cad1 as varchar(max), @p_cad2 as varchar(max))
  978. returns varchar(max)
  979. As
  980. Begin  
  981.     Return CONCAT(@p_cad1, ' ' ,@p_cad2)--space(1)
  982. End
  983.  
  984.  
  985. Print dbo.fnConcat('Hernán', 'Oscanoa')
  986. Go
  987.  
  988.  
  989. Select
  990. P.IdPedido,
  991. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado) as [Nombre y Apellidos],
  992. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  993. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision
  994. From Ventas.pedidoscabe P join RRHH.empleados E
  995. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  996. on P.IdPedido=D.IdPedido
  997. Where Year(P.FechaPedido)=2010
  998. group by P.IdPedido,
  999. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado)
  1000. go
  1001.  
  1002. Select
  1003. P.IdPedido,
  1004. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado) as [Nombre y Apellidos],
  1005. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  1006. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision
  1007. From Ventas.pedidoscabe P join RRHH.empleados E
  1008. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1009. on P.IdPedido=D.IdPedido
  1010. Where Year(P.FechaPedido)=2010
  1011. group by P.IdPedido,
  1012. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado)  with cube
  1013. go
  1014.  
  1015.  
  1016. Select
  1017. isNull(cast(P.IdPedido as Varchar(15)), 'Stotal' ) [Pedido],
  1018. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado) as [Nombre y Apellidos],
  1019. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  1020. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision
  1021. From Ventas.pedidoscabe P join RRHH.empleados E
  1022. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1023. on P.IdPedido=D.IdPedido
  1024. Where Year(P.FechaPedido)=2010
  1025. group by P.IdPedido,
  1026. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado)  with cube
  1027. go
  1028.  
  1029.  
  1030. Select
  1031. isNull(cast(P.IdPedido as Varchar(15)), replicate('*', 15)) [Pedido],
  1032. isNull(dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado), '**T O T A L**' ) as [Nombre y Apellidos],
  1033. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  1034. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision
  1035. From Ventas.pedidoscabe P join RRHH.empleados E
  1036. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1037. on P.IdPedido=D.IdPedido
  1038. Where Year(P.FechaPedido)=2010
  1039. group by P.IdPedido,
  1040. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado)  with cube
  1041. go
  1042.  
  1043.  
  1044. Select
  1045. P.IdPedido [Pedido],
  1046. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado) as [Nombre y Apellidos],
  1047. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  1048. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision
  1049. From Ventas.pedidoscabe P join RRHH.empleados E
  1050. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1051. on P.IdPedido=D.IdPedido
  1052. Where Year(P.FechaPedido)=2010
  1053. group by P.IdPedido,
  1054. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado)  with ROLLUP
  1055. go
  1056.  
  1057. SELECT
  1058. P.IdPedido [Pedido],
  1059. PR.NomProducto,
  1060. PR.CantxUnidad,
  1061. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado) as [Nombre y Apellidos],
  1062. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  1063. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision,
  1064. count(D.IdProducto) as [Cantidad de Productos]
  1065. From Ventas.pedidoscabe P join RRHH.empleados E
  1066. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1067. on P.IdPedido = D.IdPedido join Compras.productos PR
  1068. on D.IdProducto=PR.IdProducto
  1069. Where Year(P.FechaPedido)=2010
  1070. group by
  1071. P.IdPedido,
  1072. E.NomEmpleado,E.ApeEmpleado,
  1073. PR.NomProducto,
  1074. PR.CantxUnidad with cube
  1075. go
  1076.  
  1077.  
  1078. SELECT
  1079. P.IdPedido [Pedido],
  1080. dbo.fnConcat(E.NomEmpleado,E.ApeEmpleado) as [Nombre y Apellidos],
  1081. PR.NomProducto,
  1082. PR.CantxUnidad,
  1083. sum(D.Cantidad * D.PrecioUnidad) as Monto,
  1084. sum(dbo.fnCalculoCom((D.Cantidad * D.PrecioUnidad), 5)) as Comision,
  1085. count(D.IdProducto) as [Cantidad de Productos]
  1086. From Ventas.pedidoscabe P join RRHH.empleados E
  1087. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1088. on P.IdPedido = D.IdPedido join Compras.productos PR
  1089. on D.IdProducto=PR.IdProducto
  1090. Where Year(P.FechaPedido)=2010
  1091. group by
  1092. P.IdPedido,
  1093. E.NomEmpleado,E.ApeEmpleado,
  1094. PR.NomProducto,
  1095. PR.CantxUnidad with rollup
  1096. go
  1097.  
  1098.  
  1099. /*****************************************************/
  1100. /*****************************************************/
  1101. /*****************************************************/
  1102.  
  1103.  
  1104. /*************FUNCION DE TABLA EN LINEA**************/
  1105. create function IFPedidosxAño
  1106. (@p_año smallint)
  1107. Returns table
  1108. as
  1109.     return (select * from Ventas.pedidoscabe
  1110.             Where year(FechaPedido)=@p_año)
  1111. go
  1112.  
  1113. /*Verificamos la existencia de la función
  1114. IF=In line table function
  1115. */
  1116.  
  1117. select * from sys.objects
  1118. Where type = 'IF'
  1119. go
  1120. /*Verificamos la existencia de la función escalar
  1121. */
  1122.  
  1123. select * from sys.objects
  1124. Where type = 'Fn'
  1125. go
  1126.  
  1127.  
  1128. select * from IFPedidosxAño(2010)
  1129. go
  1130.  
  1131.  
  1132. /*
  1133. Crear una funcion de tabla en linea que visualice
  1134. los productos que son sumistrados por el por un
  1135. determinado proveedor, mostrando la cantidad total suministrada.
  1136. Se deberá considerar dos parametros ID DE PROVEEDOR Y iD DE PRODUCTO,
  1137. los datos a visualizar sera nombre dl proveedor, nombre del producto
  1138. y el total de unidades en existencia
  1139. */
  1140.  
  1141. create function IFProveedorProducto
  1142.     (@p_idprov int, @p_idprod int)
  1143. Returns table
  1144. as
  1145.     return (Select PV.NomProveedor, PR.NomProducto, PR.UnidadesEnExistencia
  1146.     from Compras.proveedores PV inner join Compras.productos PR
  1147.     on PV.IdProveedor=PR.IdProveedor
  1148.     Where PV.IdProveedor=@p_idprov and PR.IdProducto=@p_idprod)
  1149. Go
  1150.  
  1151.  
  1152. begin try
  1153.     declare @p_idprov int, @p_idprod int
  1154.     set @p_idprov = 1
  1155.     set @p_idprod = 10
  1156.     if not exists(select * from IFProveedorProducto( @p_idprov ,@p_idprod))
  1157.         raiserror('No hay datos para mostrar', 10, 1)
  1158.     else
  1159.         select * from IFProveedorProducto( @p_idprov ,@p_idprod)       
  1160. end try
  1161. begin catch
  1162.     if error_number()=50000
  1163.         print error_message()
  1164. end catch
  1165. GO
  1166.  
  1167.  
  1168.  
  1169. --PIVOT
  1170. /*******************************************/
  1171. /*
  1172. Consulta normal con group by
  1173. */
  1174. select Year(P.Fechapedido) [Año],
  1175.     sum(D.cantidad*D.PrecioUnidad) AS MontoTotal
  1176. from Ventas.pedidoscabe P join RRHH.empleados E
  1177. on P.IdEmpleado=E.IdEmpleado join Ventas.pedidosdeta D
  1178. on P.IdPedido = D.IdPedido
  1179. group by Year(P.FechaPedido)
  1180. order By 1 asc
  1181.  
  1182.  
  1183.  
  1184. /****************************************************************/     
  1185. /***Consulta usando Pivot*****/
  1186. Select 'Monto Total' As Monto,
  1187.         [1996],[1997],[1998],[2007],[2008],[2009],[2010],[2011]
  1188. From (Select Year(P.FechaPedido) 'Año',
  1189.             D.Cantidad * D.PrecioUnidad as ST
  1190.     From Ventas.pedidoscabe P Join RRHH.empleados E
  1191.         On P.IdEmpleado = E.IdEmpleado Join Ventas.pedidosdeta D
  1192.         On P.IdPedido = D.IdPedido  ) As SourceTable
  1193.     Pivot
  1194.         (Sum(ST)
  1195.          For Año In ([1996],[1997],[1998],[2007],[2008],[2009],[2010],[2011])
  1196.             ) As PivotTable
  1197. go
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement