{"id":6891,"date":"2014-06-09T16:41:25","date_gmt":"2014-06-09T14:41:25","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=6891"},"modified":"2014-06-09T19:02:35","modified_gmt":"2014-06-09T17:02:35","slug":"monosql-server-monografico-sobre-el-uso-de-sql-server","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/monosql-server-monografico-sobre-el-uso-de-sql-server\/","title":{"rendered":"MonoSQL Server. Monogr\u00e1fico sobre el uso de SQL-SERVER"},"content":{"rendered":"<p style=\"text-align: justify;\">En este Monogr\u00e1fico he intentado resumir experiencias realizadas con SQL-SERVER. Espero que os guste, considero que a modo de repaso\u00a0e iniciaci\u00f3n no tiene desperdicio.<\/p>\n<p style=\"text-align: justify;\">SQL Server ofrece una gran variedad de soluciones. Desde el uso del gestor para desarrollar aplicaciones tradicionales en entornos no virtualizados, hasta el trabajo en la nube. Microsoft ha hecho un esfuerzo a partir de la versi\u00f3n 2012 en las \u00e1reas de <strong>disponibilidad, manejabilidad, program\u00e1tica, escalabilidad, rendimiento y seguridad<\/strong>, pilares b\u00e1sicos para todo <strong>DBA<\/strong>.<\/p>\n<p style=\"text-align: justify;\">En la versi\u00f3n 2012-14 existen <strong>3 ediciones principales, en versiones 32 y 64 bits<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Las ediciones son, <strong>est\u00e1ndar<\/strong>,<strong> BI edition<\/strong> (capacidades de toma de decisiones, informe y anal\u00edtica) y <strong>Enterprise edition<\/strong> (SKU superior). Aunque tambi\u00e9n posee ediciones especializadas como la <strong>Developer<\/strong>, <strong>Web<\/strong> y la <strong>Express<\/strong>.<\/p>\n<p style=\"text-align: justify;\">La edici\u00f3n Developer incluye todas las caracter\u00edsticas de la Enterprise edition, pero para prop\u00f3sitos de desarrollo, testeo.<\/p>\n<p style=\"text-align: justify;\">La edici\u00f3n web posee un precio m\u00e1s econ\u00f3mico que el resto, creada para proveedores de hosting y entornos de servicio web. Esta edici\u00f3n no posee restricciones sobre el tama\u00f1o de la base de datos, aunque no posee todas las caracter\u00edsticas de las ediciones superiores. Ideal para websites y aplicaciones web.<\/p>\n<p style=\"text-align: justify;\">Por \u00faltimo la edici\u00f3n Express, es una versi\u00f3n gratuita, para proveedores\u00a0 independientes de software, desarrolladores no profesionales, y aficionados. Aunque posee serias limitaciones, soporta 1 solo procesador, 1GB de memoria y el tama\u00f1o de la base de datos solo puede ser de 10 Gb. Este gestor SQL se encuentra integrado en Visual Studio.<\/p>\n<p><!--more--><\/p>\n<p>La direcci\u00f3n web para consultar el modelo de licencias es de SQL-Server 2014:<br \/>\n<a href=\"http:\/\/www.microsoft.com\/es-xl\/server-cloud\/products\/sql-server\/Buy.aspx#fbid=zLpgo9wCnY7\" target=\"_blank\">http:\/\/www.microsoft.com\/es-xl\/server-cloud\/products\/sql-server\/Buy.aspx#fbid=zLpgo9wCnY7<\/a><\/p>\n<p style=\"text-align: justify;\">Cuando trabajamos con este potente gestor de bases de datos, podemos realizarlo asumiendo que tenemos un determinado rol. Puesto que el conocimiento de todo el producto requiere especializaciones independientes, y profesionales conocedores de cada \u00e1rea. Por ende, podr\u00e1n existir DBA o administradores de base de datos,\u00a0 desarrolladores en Transact, arquitectos de soluciones BI, analistas de bases de datos, optimizadores de rendimiento, administradores de backup, etc.<\/p>\n<p style=\"text-align: justify;\">Por lo tanto, dentro de SQL Server, es preciso diferenciar lo que es el motor del <strong>SGBDR<\/strong> de las herramientas de manejo como pueden ser el <strong>SSMS<\/strong> (SQL Server Management Studio). Los motores crean instancias en el servidor. Puede existir m\u00e1s de una instancia ejecut\u00e1ndose a la vez.<\/p>\n<p>Otras herramientas como el Administrador de configuraci\u00f3n de <strong>SQL Server o SQL Server Config Manager<\/strong> gestiona servicios y protocolos de red utilizados por SQL Server.<\/p>\n<p>El<strong> Agente SQL Server<\/strong> es otra herramienta que permite la ejecuci\u00f3n de scripts programados y trabajos de mantenimiento. Tambi\u00e9n se encarga de las alertas autom\u00e1ticas, y puede ser configurado para distribuir tareas entre servidores.<\/p>\n<p style=\"text-align: justify;\"><strong>El Analizador SQL-Server<\/strong> es una interfaz gr\u00e1fica que realiza\u00a0 consultas y ofrece resultados. Analiza comandos T-SQL, la concurrencia de eventos, bloqueos, inicios de sesi\u00f3n, errores, datos de rendimiento. En definitiva se puede auditar la actividad del servidor SQL.<\/p>\n<p>Como dise\u00f1adores y usuarios de bases de datos, l<strong>a herramienta m\u00e1s empleada es el SSMS<\/strong> o las alternativas sugeridas.<\/p>\n<p>Las copias de seguridad se pueden realizar desde el SSMS. Tambi\u00e9n existen soluciones alternativas comerciales.<\/p>\n<p>Respecto al inicio de sesi\u00f3n en SQL server, pueden existir 2 tipos.<\/p>\n<p><strong>Autenticar sobre la m\u00e1quina\/windows<\/strong> (directorio activo o local) o sobre<strong> el propio servidor SQL<\/strong>.<br \/>\nAl instalarse SQL Server se crean 2 inicios de sesi\u00f3n. La cuenta de servicio para iniciar el servicio SQL Server y <strong>el usuario sa<\/strong>. Este usuario no puede eliminarse ni modificarse. Solo estar\u00e1 disponible si no est\u00e1 configurada la autenticaci\u00f3n con Windows.<\/p>\n<p>En el servidor SQL Server pueden una serie de roles.<br \/>\n<strong>Sysadmin, Serveradmin, securityadmin, dbcreator, diskadmin, bulkadmin,processadmin, setupadmin<\/strong><\/p>\n<p>Cuando se crea una base de datos, existen una serie de usuarios por defecto.<br \/>\nEl dbo corresponde al propietario. No puede ser borrado.<br \/>\nGuest: Permite a usuarios que no tienen cuenta en la BD, que accedan a ella, pero hay que darle permiso expl\u00edcitamente.<br \/>\nInformation_schema, Permite ver los metadatos de SQL Server<br \/>\nsys, Permite consultar las tablas y vistas del sistema, procedimientos extendidos y otros objetos del cat\u00e1logo del sistema.<\/p>\n<p>Los roles y dem\u00e1s operaciones contra la base de datos se pueden realizar mediante sentencias DDL o de definici\u00f3n.<\/p>\n<p>Una base de datos puede contener m\u00faltiples Esquemas. Cada esquema tiene un propietario. Cada usuario tiene un esquema por defecto para la resoluci\u00f3n de nombres.<\/p>\n<p><strong>SQL Server es un sistema transaccional.<\/strong><\/p>\n<p>Una transacci\u00f3n es una secuencia de operaciones realizadas como una sola unidad l\u00f3gica de trabajo. Una unidad l\u00f3gica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades de atomicidad, coherencia, aislamiento y durabilidad (<strong>ACID<\/strong>), para ser calificada como transacci\u00f3n.<\/p>\n<p><em>Atomicidad<br \/>\n<\/em>Una transacci\u00f3n debe ser una unidad at\u00f3mica de trabajo, tanto si se realizan todas sus modificaciones en los datos, como si no se realiza ninguna de ellas.<\/p>\n<p>Coherencia<br \/>\nCuando finaliza, una transacci\u00f3n debe dejar todos los datos en un estado coherente.<\/p>\n<p>Aislamiento<br \/>\nLas modificaciones realizadas por transacciones simult\u00e1neas se deben aislar de las modificaciones llevadas a cabo por otras transacciones simult\u00e1neas. Una transacci\u00f3n reconoce los datos en el estado en que estaban antes de que otra transacci\u00f3n simult\u00e1nea los modificara o despu\u00e9s de que la segunda transacci\u00f3n haya concluido, pero no reconoce un estado intermedio. Esto se conoce como seriabilidad, ya que deriva en la capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones para finalizar con los datos en el mismo estado en que estaban despu\u00e9s de realizar las transacciones originales.<\/p>\n<p>Durabilidad<br \/>\nUna vez concluida una transacci\u00f3n, sus efectos son permanentes en el sistema. Las modificaciones persisten a\u00fan en el caso de producirse un error del sistema.<\/p>\n<p style=\"text-align: justify;\">Cuando trabajamos en <strong>Microsoft Access<\/strong>, pensamos en el concepto de relaci\u00f3n. Es decir, relacionamos tablas y solemos realizar la integridad referencial con un click desde el programa. Esto nos ofrece una integridad al modelo relacional que el propio motor Jet de Access se encarga de verificar.<\/p>\n<p>En SQL-Server,\u00a0 La\u00a0opci\u00f3n\u00a0Diagrama de la Base de Datos nos permite realizar las\u00a0relaciones\u00a0de las tablas en forma\u00a0Gr\u00e1fica. Para ello crearemos un diagrama de base de datos.<\/p>\n<p style=\"text-align: justify;\">Existen diversos tipos de integridad. El aplicado a campos, tipos, tablas, y relaciones. Adem\u00e1s del creado mediante procedimientos y funciones. El programador puede controlar la integridad tambi\u00e9n desde el propio c\u00f3digo. Pero la entidad referencial\u00a0 similar a la de Access lo debes hacer a trav\u00e9s de Primary Key y Foreing Key entre las tablas. Una de las alternativas que SQL Server ofrece para asegurar la integridad de datos es el uso de <strong>restricciones (constraints)<\/strong>.<\/p>\n<p>La siguiente es la sintaxis parcial general para agregar una restricci\u00f3n &#8220;<strong>foreign key<\/strong>&#8220;:<\/p>\n<p>alter table NOMBRE-TABLA1<br \/>\nadd constraint NOMBRE-RESTRICCION<br \/>\nforeign key (CAMPO-CLAVE-FORANEA)<br \/>\nreferences NOMBRE-TABLA2 (CAMPO-CLAVE-PRIMARIA);<\/p>\n<p><strong>Analic\u00e9mosla<\/strong>:<\/p>\n<p>&#8211; NOMBRE-TABLA1 referencia el nombre de la tabla a la cual le aplicamos la restricci\u00f3n,<\/p>\n<p>&#8211; NOMBRE-RESTRICCION es el nombre que le damos a la misma,<\/p>\n<p>&#8211; luego de &#8220;foreign key&#8221;, entre par\u00e9ntesis se coloca el campo de la tabla a la que le aplicamos la restricci\u00f3n que ser\u00e1 establecida como clave for\u00e1nea,<\/p>\n<p>&#8211; luego de &#8220;references&#8221; indicamos el nombre de la tabla referenciada y el campo que es clave primaria en la misma, a la cual hace referencia la clave for\u00e1nea. La tabla referenciada debe tener definida una restricci\u00f3n &#8220;primary key&#8221; o &#8220;unique&#8221;; si no la tiene, aparece un mensaje de error.<\/p>\n<p><strong><br \/>\nRespecto a las funciones y los procedimientos.<\/strong><\/p>\n<p>Las funciones de SQL Server definidas por el usuario y los procedimientos almacenados ofrecen funcionalidades similares. Ambos nos permiten crear paquetes de sentencias SQL que son almacenadas en un servidor para futuro uso.<\/p>\n<p>Gracias a ellas podemos reutilizar c\u00f3digo, esconder detalles, centralizar el mantenimiento.<\/p>\n<p>Por ejemplo, en aplicaciones que he desarrollado, el borrado de registros se realiza mediante el empleo de disparadores o triggers en vez desde el c\u00f3digo del programa.<\/p>\n<p>Un <strong>trigger\u00a0<\/strong>es un<strong>\u00a0procedimiento\u00a0almacenado<\/strong> que se ejecuta cuando se cumple una condici\u00f3n establecida al realizar una operaci\u00f3n. Dependiendo de la base de datos, los triggers pueden ser de inserci\u00f3n (INSERT), actualizaci\u00f3n (UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos. Los triggers pueden ser<strong> DML y DDL<\/strong>.<\/p>\n<p><strong>Su sintaxis general:<\/strong><\/p>\n<p><strong>CREATE<\/strong><strong>TRIGGER<\/strong>&lt;Trigger_Name,<strong>sysname<\/strong>, Trigger_Name&gt;<\/p>\n<p><strong>ON<\/strong>&lt;Table_Name,<strong>sysname<\/strong>, Table_Name&gt;<\/p>\n<p>AFTER &lt;Data_Modification_Statements,,<strong>INSERT<\/strong>,<strong>DELETE<\/strong>,<strong>UPDATE<\/strong>&gt;<\/p>\n<p><strong>AS<\/strong><\/p>\n<p><strong>BEGIN<\/strong><\/p>\n<p>&#8212; SET NOCOUNT ON added to prevent extra result sets from<\/p>\n<p>&#8212; interfering with SELECT statements.<\/p>\n<p><strong>SET<\/strong><strong>NOCOUNT<\/strong><strong>ON<\/strong>;<\/p>\n<p>&#8212; Insert statements for trigger here<\/p>\n<p><strong>END<\/strong><\/p>\n<p>Ejemplos de triggers en transact (enlace externo, castellano, Pedro Herrarte S\u00e1nchez\u00a0)<br \/>\n<a href=\"http:\/\/www.devjoker.com\/contenidos\/catss\/278\/Triggers-en-Transact-SQL.aspx\" target=\"_blank\">http:\/\/www.devjoker.com\/contenidos\/catss\/278\/Triggers-en-Transact-SQL.aspx<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Por lo tanto, el trigger es una clase especial de procedimiento almacenado que se ejecuta autom\u00e1ticamente cuando se produce un evento en el servidor de bases de datos.<br \/>\n<strong>Cu\u00e1l es entonces la diferencia entre una funci\u00f3n y un procedimiento:<\/strong><\/p>\n<p>A primera vista, las funciones y los procedimientos parecen id\u00e9nticos. Sin embargo, hay varias diferencias sutiles, pero importantes, entre las dos:<\/p>\n<ul>\n<li>Los procedimientos almacenados son llamados independientemente, usando el comando\u00a0EXEC, mientras que las funciones son llamadas dentro de otra sentencia SQL.<\/li>\n<li>Los procedimientos almacenados permiten mejorar la seguridad de la aplicaci\u00f3n concediendo permiso a los usuarios para que utilicen estos procedimientos, en lugar de permisos para acceder a las tablas dependientes. Tambi\u00e9n proveen la habilidad de restringir las acciones del usuario en un nivel mucho m\u00e1s granular que permisos standard de SQL Server.<\/li>\n<li>Las funciones deben siempre devolver un valor (tanto un valor escalar como una tabla). Los procedimientos pueden retornar un valor escalar, un valor de tabla o simplemente nada.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Sobre ficheros.<\/strong><\/p>\n<p>Una base de datos SQL Server tiene dos componentes: un archivo DATA y un archivo LOG. El archivo DATA contiene las tablas, stored procedures, defaults, rules, etc en un formato propio con extensi\u00f3n MDF. El archivo LOG contiene una copia de las \u00faltimas transacciones realizadas en un formato propio con extensi\u00f3n LDF<\/p>\n<p>Es costumbre a veces no incluir la base de datos sino incluir un archivo SCRIPT que contenga toda la informaci\u00f3n de la base de datos. De este modo lo que haces es<br \/>\n&#8211; Crear la base de datos con el Enterprise Manager del SQL SERVER<br \/>\n&#8211; Ejecutar el SCRIPT desde el Query Analyzer<br \/>\nPor default, las bases est\u00e1n en C:\\Archivos de programa\\Microsoft SQL Server\\MSSQL\\Data.<br \/>\nLos SCRIPTs suelen ser archivos de texto con extensi\u00f3n SQL.<\/p>\n<p>Para gestionar SQL Server, podemos realizarlo con la herramienta SQL Server Management Studio. Lo primero que tendremos que hacer es logearnos en el sistema. Esta herramienta permite conectarnos a las bases.<\/p>\n<p><strong>IMPORTANTE:<\/strong><\/p>\n<p>Existen<strong> alternativas comerciales para gestionar bases de datos SQL Server<\/strong>.<\/p>\n<p>HEIDI:<a href=\"http:\/\/www.heidisql.com\/\" target=\"_blank\">http:\/\/www.heidisql.com\/<\/a><br \/>\nRazorSQL: <a href=\"http:\/\/razorsql.com\/\" target=\"_blank\">http:\/\/razorsql.com\/<br \/>\n<\/a>EMS: <a href=\"http:\/\/www.sqlmanager.net\/en\/products\/mssql\/manager\" target=\"_blank\">http:\/\/www.sqlmanager.net\/en\/products\/mssql\/manager<br \/>\n<\/a>TOAD: <a href=\"http:\/\/www.quest.com\/toad-for-sql-server\/\" target=\"_blank\">http:\/\/www.quest.com\/toad-for-sql-server\/<br \/>\n<\/a>dbFORGE: <a href=\"http:\/\/www.devart.com\/dbforge\/sql\/studio\/\" target=\"_blank\">http:\/\/www.devart.com\/dbforge\/sql\/studio\/<br \/>\n<\/a>Para mac: <a href=\"https:\/\/itunes.apple.com\/us\/app\/sql-client-database-management\/id828466809?mt=12&amp;ign-mpt=uo%3D4\" target=\"_blank\">https:\/\/itunes.apple.com\/us\/app\/sql-client-database-management\/id828466809?mt=12&amp;ign-mpt=uo%3D4<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>La interfaz de Sql Management Studio es similar a la de Visual Studio para el desarrollo.<\/p>\n<p>Las bases de datos del sistema son necesarias para el funcionamiento de SQL Server.<\/p>\n<p>Para crear una base de datos, es necesario saber que existen <strong>dos archivos asociados a una base<\/strong>. Por un lado los <strong>datos<\/strong> en s\u00ed, y los registros de <strong>transacciones<\/strong>.<\/p>\n<p>Cuando se crea la base de datos se puede comprobar que aparecen 2 nombres. Un archivo que almacena las tablas y\u00a0 las filas (nombre l\u00f3gico), y un registro log para las transacciones, creaciones, eliminaciones, actualizaciones, copias.<\/p>\n<p>El SQL Server es muy importante el tama\u00f1o del archivo. Podemos establecer el tama\u00f1o inicial, una vez creada dentro del disco duro. Por defecto ocupan 5 Mb la de datos,\u00a0 1 la de transacciones.<\/p>\n<p>El tama\u00f1o inicial, no quiere decir que este restringido a su crecimiento. El crecimiento de la base es muy importante en SQL-server. Por defecto crece en 1 Mb por cada vez sin l\u00edmite, as\u00ed hasta el l\u00edmite del disco duro.<\/p>\n<p>El crecimiento se puede expresar en megas y en porcentaje.<\/p>\n<p>Las rutas de almacenamiento en disco pueden ser del tipo <strong>C:\\Program Files\\Microsoft SQL Server\\MSQLSERVER\\MSQLDATA\\DATA\\ \u2026<\/strong><\/p>\n<p>Una base de datos contiene tablas, las tablas contienen columnas y estas a su vez registros.<\/p>\n<p>La creaci\u00f3n de campos dentro de una tabla es \u201csimilar\u201d a Access. Eso si los tipos y sistema es diferente. Podremos establecer propiedades para cada tipo de campo, en la ventana propiedades de columna. Recordad que en las claves principales, no se admiten valores nulos.<\/p>\n<p>Los sistemas SQL Server son muy flexibles a la hora de cambiar el tipo los datos de una tabla una vez creada, no obstante <strong>no es recomendable<\/strong> puesto que suele estar asociada a un lenguaje. Es por ello que es necesario pensar de forma anticipada la estructura de campos que va a tener cada tabla.<\/p>\n<p>Cuando realizo acciones, se puede consultar en todo momento el SQL generado.<\/p>\n<p>El acceso a tablas suele ser <strong>[nombre-base].[dbo].[mi-tabla]<\/strong>. El dbo significa data base object u objeto de base de datos.<\/p>\n<p>Las vistas son consultas. Las peticiones a una base de datos se almacenan en vistas. Las vistas permiten seleccionar las tablas, vistas o funciones que deseamos trabajar.<\/p>\n<p><strong>Al margen de las t\u00edpicas sentencias Select, Insert, delete y update que forman parte del DML del SQL, y no explicando las DDL para crear estructuras, voy a mostrar una serie de operadores que suelen ser singulares o caracter\u00edsticos de SQL Server.<\/strong><\/p>\n<p><strong>Ejemplos<\/strong>:<\/p>\n<p><em>Clausula TOP:<\/em><br \/>\nSELECT TOP(20) nombre, apellido1 FROM clientes; -&gt;S\u00f3lo obtiene los primeros 20 resultados. Con Select TOP (10) PERCENT nombre FROM clientes: -&gt; Seleccionamos mediante porcentaje<\/p>\n<p><em>Clausula BETWEEN<\/em><br \/>\nSELECT nombre, apellido1<br \/>\nFROM dbo.clientes<br \/>\nWHERE (id BETWEEN 5 and 10);<br \/>\nSelecciona un rango entre 5 y 10 del id. Alternativa al and\u00a0 &gt;= &lt;=<\/p>\n<p><em>Clausura LIKE<\/em><br \/>\nSELECT nombre, apellido1<br \/>\nFROM dbo.clientes<br \/>\nWHERE nombre LIKE \u2018 %CA%\u2019<br \/>\nOperador m\u00e1s flexible que el =, en este caso muestra nombres que contienen CA, ejemplo: OSCAR<\/p>\n<p><em>Clausula IN<\/em><br \/>\nSELECT nombre, apellido1<br \/>\nFROM dbo.clientes<br \/>\nWHERE nombre IN (\u2018Pedro\u2019, \u2018Juan,\u2019Carlos\u2019);<br \/>\n-&gt; Alternativa perfecta al OR<\/p>\n<p><em>Clausulas JOIN<\/em><br \/>\nLEFT, RIGHT, FULL JOIN, INNER JOIN<br \/>\nINNER JOIN : Resultado columnas con misma condici\u00f3n. Por defecto. No aparece informaci\u00f3n cuando no se cumple la condici\u00f3n<br \/>\nLEFT OUTER JOIN: Todos los elementos de la columna de la izquierda y solo aquellos que tenga de la derecha.<br \/>\nRIGHT OUTER JOIN: Todos los elementos de la columna derecha aunque no tengan registros asociados y solo aquellos condici\u00f3n izquierda.<br \/>\nFULL OUTER JOIN: Resultados\u00a0 de las tablas. Uni\u00f3n de tablas.<\/p>\n<p><em>Union<\/em><br \/>\nSELECT nombre, apellido1<br \/>\nFROM dbo.usuarios\u00a0<em>UNION<br \/>\n<\/em>SELECT nombre, apellido1<br \/>\nFROM dbo.usuarios<\/p>\n<p>Une varias consultas. Podemos emplear UNION ALL, para forzar que muestre los duplicados.<\/p>\n<p><strong>Existen en TSQL funciones de agregado.<\/strong><br \/>\nGracias a las funciones no necesitamos un lenguaje de programaci\u00f3n de apoyo para calcular datos de las tablas. Lo hace SQL por nosotros.<br \/>\nAVG, SUM,MIN, MAX, COUNT, COUNT(DISTINT nombre) -&gt;(para filtrar resultados\/regitros duplicados, sobre todo en cuentas)<\/p>\n<p><strong>Funciones escalares<\/strong><br \/>\nSELECT UPPER(nombre) from dbo.clientes; &#8212; May\u00fasculas.<br \/>\nSELECT LOWER(nombre) FROM dbo.clientes; &#8212; Min\u00fasculas.<br \/>\nSELECT SUBSTRING(nombre, 1, 2) AS iniciales FROM dbo.clientes;\u00a0 &#8212; Recorta cadenas<br \/>\nSELECT LEN(nombre) as longitud FROM dbo.clientes; &#8212; Longitud<br \/>\nSELECT { fn NOW()} as fecha from dbo.clientes;\u00a0 &#8212; Coloca la fecha actual<br \/>\nSELECT CONVERT(CARCHAR(40), GETDATE(), 1) as fecha; &#8212; Devuelve fecha actual<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Es necesario diferenciar entre SQL y Transact SQL. En ocasiones programar acciones y en funci\u00f3n de las condiciones, ejecutar consultas SQL. \u00a0Esta l\u00f3gica se programa mediante el lenguaje de la base de datos. Gracias a Transact no necesitamos programar desde el exterior las consultas, podemos programar dentro de SQL Server.<\/p>\n<p><strong>Aspectos b\u00e1sicos de Transact SQL<\/strong><\/p>\n<p>Podemos ejecutar transact desde cualquier consulta.<\/p>\n<ul>\n<li>Los comentarios simples se establecen con 2 guiones.<\/li>\n<li>\/* *\/ Para los comentarios m\u00faltiples.<\/li>\n<li>Para crear variables debemos declararlas. El formato de las variables puede ser el mismo que los datos de las tablas.<\/li>\n<\/ul>\n<p>Ejemplo:\u00a0 declare @MiNombre VARCHAR(200)<br \/>\nPara asignar el valor set @MiNombre=\u2019Oscar\u2019<\/p>\n<p>El comando print, nos devuelve informaci\u00f3n en pantalla. Print \u2018Hola mundo\u2019<\/p>\n<ul>\n<li>Podemos imprimir variables: print @MiNombre<\/li>\n<li>Podremos conectar la base mediante variables:<br \/>\nSelect @MiNombre = nombre FROM proveedores WHERE id=\u20192\u2019<\/li>\n<li>Los operadores son los mismos que otros lenguajes (+,-,*,\/,%).<br \/>\nprint @numero1 \/ @numero2<\/li>\n<li>Existen estructuras de control. Ejemplo de Estructura condicional (&lt;,&gt;,!&lt;,&gt;=,&lt;=), podemos emplear operadores l\u00f3gicos, AND, OR<br \/>\nIF @MiNombre=\u2019OSCAR\u2019<br \/>\nprint \u2018Soy yo\u2019<br \/>\nELSE<br \/>\nprint \u2018No s\u00e9 qui\u00e9n es\u2019<\/li>\n<li>Posee estructuras iterativas.<br \/>\nset @i=0<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>Un peque\u00f1o bucle<\/strong><\/p>\n<p>While (@contador&lt;10)<br \/>\nbegin<br \/>\nSet @contador=contador + 1<br \/>\nend<\/p>\n<p><strong>La estructura CASE<\/strong><br \/>\nset @mensaje= (CASE @estado<br \/>\nWHEN \u2018SI\u2019 THEN \u2018Estado correcto\u2019<br \/>\nWHEN \u2018NO\u2019 THEN \u2018Estado incorrecto\u2019<br \/>\nEND<\/p>\n<p>Podemos hacer consultas con variables.<br \/>\nSelect @total=(SELECT cantidad FROM pedidos WHERE cliente = @cliente)<br \/>\nEmplear WHEN de CASES con variables, ejemplo: when @total<\/p>\n<p><strong>Estructuras de control Try-Catch<\/strong><\/p>\n<p>Necesitaremos crear un begin try y end try y luego un\u00a0 begin catch end catch<\/p>\n<p>Ejemplo<br \/>\nbegin try<br \/>\n&#8212; comandos<br \/>\nend try<br \/>\nbegin catch<br \/>\nprint ERROR_MESSAGE()<\/p>\n<p>end catch<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Esto es todo que no es poco, \u00a0de momento &#8230;<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este Monogr\u00e1fico he intentado resumir experiencias realizadas con SQL-SERVER. Espero que os guste, considero que a modo de repaso\u00a0e iniciaci\u00f3n no tiene desperdicio. SQL Server ofrece una gran variedad de soluciones. Desde el uso del gestor para desarrollar aplicaciones tradicionales en entornos no virtualizados, hasta el trabajo en la nube. Microsoft ha hecho un esfuerzo a partir de la versi\u00f3n 2012 en las \u00e1reas de disponibilidad, manejabilidad, program\u00e1tica, escalabilidad, rendimiento y seguridad, pilares b\u00e1sicos para todo DBA. En la versi\u00f3n 2012-14 existen 3 ediciones principales, en versiones 32 y 64 bits. Las ediciones son, est\u00e1ndar, BI edition (capacidades de toma de decisiones, informe y anal\u00edtica) y Enterprise edition (SKU superior). Aunque tambi\u00e9n posee ediciones especializadas como la Developer, Web y la Express. La edici\u00f3n Developer incluye todas las caracter\u00edsticas de la Enterprise edition, pero para prop\u00f3sitos de desarrollo, testeo. La edici\u00f3n web posee un precio m\u00e1s econ\u00f3mico que el resto, creada para proveedores de hosting y entornos de servicio web. Esta edici\u00f3n no posee restricciones sobre el tama\u00f1o de la base de datos, aunque no posee todas las caracter\u00edsticas de las ediciones superiores. Ideal para websites y aplicaciones web. Por \u00faltimo la edici\u00f3n Express, es una versi\u00f3n gratuita, para proveedores\u00a0 independientes de software, desarrolladores no profesionales, y aficionados. Aunque posee serias limitaciones, soporta 1 solo procesador, 1GB de memoria y el tama\u00f1o de la base de datos solo puede ser de 10 Gb. Este gestor SQL se encuentra integrado en Visual Studio.<\/p>\n","protected":false},"author":1,"featured_media":6893,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,102,7,295,14],"tags":[671,39,568],"class_list":["post-6891","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bases-de-datos","category-microsoft","category-software","category-sql-2","category-varios","tag-microsoft","tag-sql","tag-sql-server"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=6891"}],"version-history":[{"count":9,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6891\/revisions"}],"predecessor-version":[{"id":6901,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/6891\/revisions\/6901"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/6893"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=6891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=6891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=6891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}