jueves, 13 de junio de 2013

SQL AVANZADO

SQL Server proporciona un conjunto de tipos de datos del sistema que define todos los tipos de datos que pueden utilizarse con SQL Server. También podemos definir nuestros propios tipos de datos en Transact-SQL o Microsoft .NET Framework. Los tipos de datos de alias están basados en los tipos de datos proporcionados por el sistema. Para obtener más información acerca de los tipos de datos de alias, vea Trabajar con tipos de datos de alias. Los tipos definidos por el usuario obtienen sus características de los métodos y los operadores de una clase que se crean mediante uno de los lenguajes de programación compatibles con .NET Framework. Para obtener más información, vea Trabajar con tipos definidos por el usuario para CLR. 

Cuando dos expresiones que tienen tipos de datos, intercalaciones, precisión, escala o longitud diferentes son combinadas por un operador, las características del resultado vienen determinadas por lo siguiente:
  • El tipo de datos del resultado viene determinado por la aplicación de las reglas de precedencia de tipos de datos a los tipos de datos de las expresiones de entrada. Para obtener más información, vea Prioridad de tipo de datos Transact-SQ.
  • La intercalación del resultado viene determinada por las reglas de precedencia de intercalación cuando el tipo de datos del resultado es charvarchartextncharnvarchar o ntext. Para obtener más información, vea Prioridad de intercalación Transact-SQL.
  • La precisión, escala y longitud del resultado dependen de la precisión, escala y longitud de las expresiones de entrada. Para obtener más información, vea Precisión, escala y longitud (Transact-SQL).
SQL Server 2005 proporciona sinónimos de tipos de datos para la compatibilidad con SQL-92. Para obtener más información, vea Sinónimos de tipos de datos Transact-SQL.

ategorías de tipos de datos

Los tipos de datos de SQL Server 2005 se organizan en las siguientes categorías:
Numéricos exactosCadenas de caracteres Unicode
Numéricos aproximadosCadenas binarias
Fecha y horaOtros tipos de datos
Cadenas de caracteres
En SQL Server 2005, según las características de almacenamiento, algunos tipos de datos están designados como pertenecientes a los siguientes grupos:
  • Tipos de datos de valores grandes: varchar(max)nvarchar(max) y varbinary(max)
  • Tipos de datos de objetos grandes: textntextimagevarchar(max)nvarchar(max)varbinary(max) y xml
Nota: sp_help devuelve -1 como la longitud del valor de gran tamaño y de los tipos de datos xml.

Numéricos exactos

bigintdecimal
intnumeric
smallintmoney
tinyintsmallmoney
bit

Numéricos aproximados

floatreal

Fecha y hora

datetimesmalldatetime

Cadenas de caracteres

chartext
varchar

Cadenas de caracteres Unicode

ncharntext
nvarchar

Cadenas binarias

binaryimage
varbinary

Otros tipos de datos


cursortimestamp
sql_variantuniqueidentifier
tablexml

inónimos de tipos de datos (Transact-SQL)

Los sinónimos de tipos de datos se incluyen en SQL Server 2005 por compatibilidad con SQL-92. En la siguiente tabla se incluyen los sinónimos y los tipos de datos de sistema de SQL Server a los que se asignan.
SinónimoTipo de datos de sistema de SQL Server
Binary varyingvarbinary
char varyingvarchar
characterchar
characterchar(1)
character(n)char(n)
character varying(n)varchar(n)
Decdecimal
Double precisionfloat
float[(n)] para n = 1-7real
float[(n)] para n = 8-15float
integerint
national character(n)nchar(n)
national char(n)nchar(n)
national character varying(n)nvarchar(n)
national char varying(n)nvarchar(n)
national textntext
rowversiontimestamp
Los sinónimos de tipos de datos pueden utilizarse en lugar del nombre del tipo de datos base correspondiente en las instrucciones del lenguaje de definición de datos (DDL), como CREATE TABLE, CREATE PROCEDURE o DECLARE @variable. Sin embargo, los sinónimos no tienen visibilidad después de crear el objeto. Una vez creado el objeto, se le asigna el tipo de datos base asociado al sinónimo. No hay ningún registro de que el sinónimo se haya especificado en la instrucción que ha creado el objeto.
A todos los objetos que proceden del objeto original, como las columnas del conjunto de resultados o las expresiones, se les asigna el tipo de datos base. Todas las funciones de metadatos subsiguientes ejecutadas en el objeto original y cualquier objeto derivado informarán del tipo de datos base y no del sinónimo. Este comportamiento se produce con las operaciones de metadatos como sp_help y otros procedimientos almacenados del sistema, las vistas del esquema de información o las diferentes operaciones de metadatos de la API de acceso a datos que informan de los tipos de datos de las columnas de tablas o conjuntos de resultados.
Por ejemplo, puede crear una tabla si especifica national character varying:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, VarCharCol national  character varying(10))
VarCharCol se asigna a un tipo de datos nvarchar(10) y todas las funciones de metadatos posteriores informan de la columna como columna nvarchar(10). Las funciones de metadatos nunca informarán de ellos como columna national character varying(10).

Precisión, escala y longitud (Transact-SQL)

La precisión es el número de dígitos de un número. La escala es el número de dígitos situados a la derecha de la coma decimal de un número. Por ejemplo, el número 123,45 tiene una precisión de 5 y una escala de 2.
En SQL Server 2005, la precisión máxima predeterminada de los tipos de datos numeric y decimal es 38. En versiones anteriores de SQL Server, el valor predeterminado máximo es 28.
La longitud de un tipo de datos numérico es el número de bytes utilizados para almacenar el número. La longitud para una cadena de caracteres o tipo de datos Unicode es el número de caracteres. La longitud para los tipos de datos binaryvarbinary y image es el número de bytes. Por ejemplo, un tipo de datos int que puede contener 10 dígitos se almacena en 4 bytes y no acepta coma decimal. El tipo de datosint tiene una precisión de 10, una longitud de 4 y una escala de 0.
Cuando se concatenan dos expresiones charvarcharbinary o varbinary, la longitud de la expresión resultante es la suma de las longitudes de las dos expresiones de origen u 8.000 caracteres, lo que sea menor.
Cuando se concatenan dos expresiones nchar o nvarchar, la longitud de la expresión resultante es la suma de las longitudes de las dos expresiones de origen o 4.000 caracteres, lo que sea menor.
Cuando se comparan dos expresiones del mismo tipo de datos pero de distintas longitudes mediante UNION, EXCEPT o INTERSECT, la longitud resultante es la longitud máxima de las dos expresiones.
La precisión y la escala de los tipos de datos numéricos, excepto decimal, son fijas. Si un operador aritmético tiene dos expresiones del mismo tipo, el resultado tiene el mismo tipo de datos con la precisión y la escala definidas para ese tipo de datos. Si un operador tiene dos expresiones con tipos de datos numéricos diferentes, las reglas de prioridad de tipos de datos definen el tipo de datos del resultado. El resultado tiene la precisión y la escala definidas para el tipo de datos que le corresponde.
Esta tabla define cómo se calculan la precisión y la escala del resultado de la operación cuando éste es de tipo decimal. El resultado es decimal cuando se cumple alguna de las siguientes condiciones:
Ambas expresiones son de tipo decimal.
Una expresión es decimal y la otra es de un tipo de datos con una prioridad menor que decimal.
Las expresiones de operando se denotan como expresión e1, con precisión p1 y escala s1, y expresión e2, con precisión p2 y escala s2. La precisión y la escala de cualquier expresión que no sea decimal es la precisión y la escala definidas para el tipo de datos de la expresión.
OperaciónPrecisión del resultadoEscala del resultado *
e1 + e2máx(s1, s2) + máx(p1-s1, p2-s2) + 1máx(s1, s2)
e1 - e2máx(s1, s2) + máx(p1-s1, p2-s2) + 1máx(s1, s2)
e1 * e2p1 + p2 + 1s1 + s2
e1 / e2p1 - s1 + s2 + máx(6, s1 + p2 + 1)máx(6, s1 + p2 + 1)
e1 { UNION | EXCEPT | INTERSECT } e2máx(s1, s2) + máx(p1-s1, p2-s2)máx(s1, s2)

Prioridad de tipo de datos (Transact-SQL)

Cuando un operador combina dos expresiones de tipos de datos distintos, las reglas de prioridad de tipo de datos especifican que el tipo de datos con la prioridad más baja se convierta al tipo de datos con la prioridad más alta. Si la conversión no es una conversión implícita admitida, se devuelve un error. Cuando ambas expresiones de operandos tienen el mismo tipo de datos, el resultado de la operación tiene ese tipo de datos.
SQL Server 2005 utiliza el siguiente orden de prioridad para los tipos de datos:
  • tipos de datos def. por el usuario (el +alto)
  • sql_variant
  • xml
  • datetime
  • smalldatetime
  • float
  • real
  • decimal
  • money
  • smallmoney
  • bigint
  • int
  • smallint
  • tinyint
  • bit
  • ntext
  • text
  • image
  • timestamp
  • uniqueidentifier
  • nvarchar
  • nchar
  • varchar
  • char
  • varbinary
  • binary (el +bajo)