Error en Formato de Fechas SQL SERVER

Error en Formato de Fechas SQL SERVER 


En algunas ocasiones al realizar una consulta hacia nuestro servidor de base de datos tenemos un error de formato de fecha, esto se puede deber a que el lenguaje que está definido en nuestro servidor no concuerda con nuestras consultas enviadas.

Para solucionar este error te dejo unas instrucciones que yo utilicé en SQL Server 2008, 2012 y 2014.  No he probado estas instrucciones en otras versiones de SQL server pero puedes intentar realizarlas y dejarme tus comentarios.

Procedimiento para solucionar el error de Formato de Fechas en SQL Server:

-- Con esta instrucción Verificamos el lenguaje que tiene establecido actualmente nuestro servidor de SQL Server en la opción 'Languaje'
DBCC USEROPTIONS

Nos mostrará algo así:



-- Ahora si queremos ver las opciones de lenguajes que existen en nuestro servidor podemos revisarlo con la siguiente instrucción:
SELECT * FROM SYS.SYSLANGUAGES

-- esto nos desplegará un listado como el siguiente
Error de Formato de Fechas en SQL SERVER


-- Una vez elegido el id del lenguaje que deseamos establecer como default en una determinada base de datos ejecutamos la siguiente instrucción 
Use MiBaseDeDatos

--Nota: para poder ejecutar las instrucciones debemos iniciar sesión con el Usuario SA o con un usuario que tenga permisos altos nuestro servidor de SQL SERVER

EXEC SP_CONFIGURE 'DEFAULT LANGUAGE', 0 ;
GO
RECONFIGURE ;

-- Tal vez también será necesario que cambies el lenguaje del usuario con el que ejecutas tus consultas a la base de datos

-- ESTE SEGUNDO ES PARA CAMBIAR EL LENGUAJE POR DEFAULT DE UN USUARIO EN PARTICULAR
EXEC SP_DEFAULTLANGUAGE 'MiUsuario', 'US_ENGLISH';

GO
RECONFIGURE;

Espero que te sirvan estas sencillas instrucciones para solucionar el error de formato de fechas en SQL Server.

Si deseas que en esta página se compartan temas específicos de SQL entonces por favor deja un comentario al Final de este artículo.

Mis Mejores Saludos
Xavier García



Error Distribuited Transactions SQL SERVER

Error en Transacciones Distribuidas de SQL SERVER

En algunas ocasiones se nos presenta un Error cuando queremos realizar consultas entre un servidor de base de datos de SQL server hacia otro servidor vinculado.

Error Distribuited Transactions SQL SERVER 

Para soluciona este error vemos varias soluciones en otras páginas refiriéndose a modificar los permisos en la Parte DTC (distribuited transactions coordinator) de nuestro servidor de base de datos y del servidor de bases de datos vinculado.

Así es como debe estar configurada esta opción en los servidores que vayan a participar en consultas de SLQ SERVER

ERROR Distribuited Transactions Coordinator SQL SERVER

Si ya tienes esta configuración y aún así te sigue mandando el Error Distribuited Transactions SQL SERVER entonces utiliza las siguientes instrucciones en una ventana de Query Analyzer. de SQL SERVER.

Nota: debes ejecutar las instrucciones tanto en el servidor 1 como en el servidor 2

En el Servidor 1 ejecutarás:
eXEC sp_serveroption @server = 'miservidor2',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;

En el Servidor 2 ejecutarás:
EXEC sp_serveroption @server = 'miservidor1',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;

Espero que te ayuden estas pequeñas instrucciones para eliminar este molesto error de transacciones distribuidas en SQL SERVER a mi en lo particular me libraron de muchas horas de incertidumbre.


Mis Mejores Saludos
Xavier García


Shrink - Truncar o Reducir LOG de una Base de Datos SQL SERVER

Shrink - Truncar o Reducir LOG de una Base de Datos SQL SERVER

Las siguientes sentencias o instrucciones para truncar el log de una base de datos en SQL Server funcionan en SQL Server a partir en su versión 2008

.primero nos conectamos al editor de SQL Server con credenciales de usuario SA (administrativo)
nos conectamos a la base de datos Master.

1.-  
Use Master
ALTER DATABASE MiBasedeDatos SET RECOVERY SIMPLE WITH NO_WAIT

-- Ahora nos cambiamos a la base de datos con
Use MiBasedeDatos

2.-
-- truncamos el archivo log de la base de datos
GO
DBCC SHRINKFILE('MiBasedeDatos_Log', 0)

         En caso de que no sepamos como se llama nuestro archivo de log de transacciones lo podemos            obtener con la siguiente consulta:

      select *
      from sysfiles

      nos dará un resultado como el siguiente:
Shrink - Truncar o Reducir LOG de una Base de Datos SQL SERVER


3.-
-- Como último paso realizamos lo siguiente:
USE [master]
GO
ALTER DATABASE MiBasedeDatos SET RECOVERY FULL WITH NO_WAIT


Para hacer Shrink o Truncar (Reducir) el Log en Una base de Datos Sql Server 2005 o 2000 

Se utilizan las siguientes instrucciones:

USE MiBasedeDatos 

BACKUP  LOG MiBasedeDatos WITH TRUNCATE_ONLY
después de esto hay que ejecutar el siguiente comando

DBCC SHRINKFILE(pubs_log,2) 


Mis Mejores Saludos

CONSULTAS DINAMICAS EN SQL SERVER

COMO REALIZAR CONSULTAS DINAMICAS EN SQL SERVER

Una de las Más grandes utilidades de lenguaje de base de datos SQL Server consiste en las consultas dinámicas.

¿Qué es una consulta dinámica en SQL SERVER?
Una consulta dinámica es aquella que puede irse armando o formando según la necesidad de la información a extraer, en donde puede variar absolutamente todo; los campos de la parte del select, la condicionante en la parte del where, el ordenamiento en la parte del order by en fin, es una consulta 100% dinámica.

Ejemplos de Consulta Dinámica en SQL SERVER

Vamos a lo que nos interesa, como armar o cómo utilizar esta excelente opción de SQL SERVER.

Primero tenemos que declarar Una Variables de tipo NVarchar de longitud 4000, hasta el momento esta es la máxima longitud que se permite en una variable que se ocupará para realizar una consulta dinámica.

DECLARE @QUERY AS NVARCHAR(4000)
SET @QUERY = ''

Después iremos armando a necesidad la consulta, por ejemplo, traer los operadores que tengan más de 2 hijos

DECLARE @QUERY AS NVARCHAR(4000)
SET @QUERY = ''

SET @QUERY = @QUERY +  ' SELECT * '
SET @QUERY = @QUERY +  ' FROM EMPLEADOS AS EMP  '
SET @QUERY = @QUERY +  ' INNER JOIN CANTIDAD_HIJOS AS CH ON '
SET @QUERY = @QUERY +  ' EMP.ID_EMPLEADO = CH.ID_EMPLEADO '
SET @QUERY = @QUERY +  ' WHERE CH.HIJOS > 2 '

EXEC SP_EXECUTESQL @QUERY

El resultado será el siguiente:
Consultas Dinámicas en SQL SERVER


Ahora, vamos a cambiar la condicionante de cantidad de hijos para pasarlo como un parámetro y para que no quede fijo en la consulta, para ello declaramos la variable que utilizamos como parámetro:

DECLARE @QUERY AS NVARCHAR(4000)
DECLARE @HIJOS AS INT -- declaramos la variable
SET @QUERY = '' 

SET @HIJOS = 2 -- le ponemos un valor a la variable

SET @QUERY = @QUERY +  ' SELECT * '
SET @QUERY = @QUERY +  ' FROM EMPLEADOS AS EMP  '
SET @QUERY = @QUERY +  ' INNER JOIN CANTIDAD_HIJOS AS CH ON '
SET @QUERY = @QUERY +  ' EMP.ID_EMPLEADO = CH.ID_EMPLEADO '
SET @QUERY = @QUERY +  ' WHERE CH.HIJOS > @HIJOS ' -- ponemos la variable dentro del query dinámico

EXEC SP_EXECUTESQL @QUERY , N'@HIJOS AS INT', @HIJOS -- de esta manera pasamos el parámetro a la consulta dinámica

esto nos proporcionará el mismo resultado de arriba:

Consultas dinámicas en SQL Server imagen 2

¿Cómo podemos pasar más de un parámetro a una consulta dinámica?

Seguramente nos veremos en la necesidad de pasar más de un parámetro a la consulta dinámica, no  hay mucho problema, solo debemos declararla al inicio y después anexarla en la ejecución de la consulta, es decir, en la parte del EXEC SP_EXECUTESQL

Ejemplo:
Digamos que ahora requerimos obtener el empleado que tenga más de 1 hijo y que se llame JUAN

DECLARE @QUERY AS NVARCHAR(4000)
DECLARE @HIJOS AS INT
DECLARE @NOMBRE AS VARCHAR(50) -- Declaramos el Segundo parámetro
SET @QUERY = ''

SET @HIJOS = 1
SET @NOMBRE = 'JUAN' -- Le Asignamos un Valor

SET @QUERY = @QUERY +  ' SELECT * '
SET @QUERY = @QUERY +  ' FROM EMPLEADOS AS EMP  '
SET @QUERY = @QUERY +  ' INNER JOIN CANTIDAD_HIJOS AS CH ON '
SET @QUERY = @QUERY +  ' EMP.ID_EMPLEADO = CH.ID_EMPLEADO '
SET @QUERY = @QUERY +  ' WHERE  CH.HIJOS > @HIJOS  AND '
SET @QUERY = @QUERY +  ' EMP.NOMBRE = @NOMBRE   ' -- Lo ponemos dentro de la conslta dinámica

EXEC SP_EXECUTESQL @QUERY , N'@HIJOS AS INT, @NOMBRE AS VARCHAR(50) ', @HIJOS, @NOMBRE -- Lo Anexamos dentro de la parte de Ejecución

Resultado:
Pasando más de un Parámetro a una consulta Dinámica

Ten en cuenta que puedes cambiar cualquier parte de una consulta dinámica en base a tus necesidades.

Gracias por tu Visita.
Mis Mejores Saludos
Xavier García

Uso de SubConsultas en SQL Server (SubQueries)

Subconsultas o SubQueries en SQL Server

Muchas veces no vemos en la necesidad de Realizar una consulta de datos dentro de otra consulta ya creada, a lo que se le llama SubConsultas ó SubQueries. Pondré algunos ejemplos del uso de subconsultas a continuación.

SubConsulta sencilla para traer la descripción de puesto de un empleado:


Digamos que una consulta sobre la tabla empleados nos devuelve los siquientes resultados:

SELECT * 
FROM EMPLEADOS

Subconsultas o SubQueries SQL SERVER 1

Y también tenemos la tabla Puestos, la cuál contiene los siguientes Valores.

SELECT *
FROM PUESTOS

subqueries SQL SERVER

Ahora, digamos que cuando consultemos la tabla de empleados queremos que nos aparezca la descripción del puesto, obviamente esto lo podemos hacer relacionando la tabla de empleados con la tabla puestos por el campo id_puesto pero en este ejemplo estamos tratando de demostrar el uso de las subconsultas en sql server, entonces quedaría de esta forma:

SELECT EMP.ID_EMPLEADO, EMP.NOMBRE, EMP.FECHA_INGRESO, 
(SELECT P.DESCRIPCION 
                  FROM PUESTOS P 
                 WHERE P.ID_PUESTO = EMP.ID_PUESTO) AS DESCRIPCION_PUESTO
FROM EMPLEADOS AS EMP

El resultado es el siguiente:

EJEMPLO de SubConsultas en SQL SERVER


Uso de Subconsultas como Tablas Temporales

Algunas veces es recomendable utilizar subconsultas para evitar crear tablas temporales, es decir que el resultado de una consulta lo podemos como si fuera un tabla temporal, ejemplo:

Vamos a utilizar el query creado en el ejemplo anterior como si fuera una tabla temporal:

SELECT *
FROM (
SELECT EMP.ID_EMPLEADO, EMP.NOMBRE, EMP.FECHA_INGRESO, 
(SELECT P.DESCRIPCION 
                  FROM PUESTOS P 
                 WHERE P.ID_PUESTO = EMP.ID_PUESTO) AS DESCRIPCION_PUESTO
FROM EMPLEADOS AS EMP) AS TABLA_TEMPORAL

solo pusimos todo el query anterior dentro de parentesis () y al final un alias que es como se llamará la supuesta tabla temporal.

Mis Mejores Saludos
Xavier García


Explicación y Diferencia del uso de Inner Join en SQL

USO DE INNER JOIN

Seguramente has notado que algunas consultas están formadas por varias tablas de datos, y para enlazar estas tablas de datos se utuliza la sentencia INNER JOIN 

También habrás visto consultas que están formadas por varias tablas de datos, y para enlazar estas tablas de datos no se utiliza la sentencia INNER JOIN

Ejemplo de relación de tablas CON Inner Join

SELECT * 
FROM EMPLEADOS AS EMP 
INNER JOIN CANTIDAD_HIJOS AS CH ON

EMP.ID_EMPLEADO = CH.ID_EMPLEADO

Nos mostrará el siguiente resultado
Inner Join Ejemplo



Cuando utilizamos la sentencia de relación INNER JOIN la relación de los campos se realiza después de la palabra ON y en esta consulta no utilizamos WHERE


Ejemplo de relación de tablas SIN Inner join

SELECT * 
FROM EMPLEADOS AS EMP, CANTIDAD_HIJOS AS CH 

WHERE EMP.ID_EMPLEADO = CH.ID_EMPLEADO

esta consulta nos devuelve el mismo resultado:


para la segunda forma la relación de los campos se realiza después de la palabra WHERE y en esta consulta separamos los nombres de las tablas por una coma 


Te pongo un EJEMPLO DE INNER JOIN  enlazando más de dos tablas y utilizando una condicionante en el WHERE.


SELECT * 
FROM EMPLEADOS AS EMP 
INNER JOIN CANTIDAD_HIJOS AS CH ON
EMP.ID_EMPLEADO = CH.ID_EMPLEADO
INNER JOIN SUELDO_EMPLEADO AS SE ON
EMP.ID_EMPLEADO = SE.ID_EMPLEADO
WHERE SE.SUELDO > 15000

Estamos enlazando 3 Tablas, EMPLEADOS ,  CANTIDAD_HIJOS y SUELDO_EMPLEADO 
y en la condicinante WHERE estamos diciendo que solo nos traiga aquellos empleados cuyo sueldo sea mayor a 15000.

ejemplo de Inner Join con 3 tablas



Mis Mejores Saludos
Xavier García




Error al Restaurar una Base de Datos

Después de hacer una Restauración de una base de datos es probable que nos topemos con que no podemos accesar a dicha base de datos y se nos muestre un error como el siguiente:

"The table either does not exist or the current user does not have permissions on that table"

"La entidad de seguridad de servidor "usuario" no puede tener acceso a la base de datos "MI_BASE_DE_DATOS" en el contexto de seguridad actual."

"La base de Datos no está Accesible"

Esto es debido a que el propietario (owner) de nuestra base de datos quedó des-asignado  de la base de datos que fue restaurada. Lo que algunos llaman "Usuario Huerfano"

La solución es sencilla:

primero que nada debes loguearte a tu servidor de bases de datos con el usuario SA una vez logueado Ejecuta el siguiente Stored prodedure en la base de datos que quedó con el problema de usuario:

USE MI_BASE_DE_DATOS
SP_CHANGE_USERS_LOGIN 'REPORT'

El resultado serán los usuarios huérfanos de la bd:
usuario huerfano acceso base de datos




Ahora, cámbiate a la base de datos Master y ejecutas el siguiente SP sustituyendo los valores de los parámetros por tus valores.

Use Master
exec sp_addlogin @loginame = 'Mi_usuario', @passwd= 'Mi_password', @defdb = 'Mi_Base_De_Datos'

Quizá te marque un error como el siguiente:
La entidad de seguridad de servidor 'Mi_usuario' ya existe.
The server principal 'Mi_usuario' already exists.

No te preocupes, es solamente el paso 1, eso quiere decir que ya existe el usuario en el contexto del servidor. Ahora procedemos a reparar el usuario Huérfano con el siguiente SP. pero antes nos cambiamos a la base de datos que tenía el problema del usuario

Use Mi_Base_De_datos
sp_change_users_login 'Update_One', 'Mi_Usuario', 'Mi_usuario'

Comandos completados correctamente.


para comprobar podemos ejecutar nuevamente la siguiente consulta y ya no debería aparecernos el usuario huérfano.

USE MI_BASE_DE_DATOS
SP_CHANGE_USERS_LOGIN 'REPORT'

Para finalizar, cerramos la sesión del usuario SA y nos volvemos a conectar ahora con el usuario que tenía el problema.


Mis Mejores Saludos
Xavier García


Como cambiar el Collation (Intercalación) SQL SERVER

Como cambiar el Collation (Intercalación) en una Base de Datos de SQL SERVER

Algunas veces requerimos cambiar el Collation en una Base de Datos con el que se dio de alta
una base de datos, por lo regular esto es necesario cuando nuestro servidor de base de
datos tiene establecido un collation y nuestra base de datos fue dada de alta con otro
collation distinto.

Por Ejemplo: Mi servidor tiene el collation SQL_Latin1_General_CP1_CI_AI
y una base de datos se dio de alta con el collation: Modern_Spaish_CI_AS

El primer collation significa que el servidor el Collation está configurado:
CI (Case Insensitive ó Insensible a Mayúsculas y Minúsculas) AI (Accent Insensitive ó Insensible a Asentos)

y la base de datos fue configurada como:
CI (Case Insensitive) AS (Accent Sensitive ó Sensible a Acentos)

Esto provoca que al realizar alguna búsqueda, por ejemplo de algún nombre que contenga
un asento en una letra el SQL nos va mandar un error de Collation similar al siguiente:




Para cambiar el Collation de una base de datos sigamos las siguientes instrucciones

-- Nos cambiamos a la Base de Datos Master con credenciales del usuario SA
USE master;

-- Con este query checamos el collation (intercalación) que tiene actualmente nuestra BD
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MI_BASE_DE_DATOS'

Como cambiar el collation de una Base de Datos en SQL SERVER

-- Antes de Aplicar el Alter a la Base de Datos tendremos que poner la BD en modo single_user, es decir que los demás usuarios serán desconectados por un momento. (Avise a los usuarios)

ALTER DATABASE MI_BASE_DE_DATOS SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

-- Aplicamos un alter database con el nombre de la base de datos y el collation (intercalación) que queremos establecer
ALTER DATABASE MI_BASE_DE_DATOS COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI


-- Regresamos el modo de acceso de la base de datos a Multi Usuario
ALTER DATABASE MI_BASE_DE_DATOS SET MULTI_USER;

-- Volvemos a verificar el Collation de la BD:
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MI_BASE_DE_DATOS'

Cambiar Collation SQL SERVER 2008


-- Ya debería estar cambiada.

En mi caso me presentó un error posterior debido a un objeto que marcaba como que tenía dependencias y que debido a ello no se podía hacer el alter de la base de datos.

The object 'FuncionMesesaDias' is dependent on database collation. 
The database collation cannot be changed if a schema-bound object depends on it. 
Remove the dependencies on the database collation and 
then retry the operation.

Como este objeto es una función, lo único que hice fue checar su estructura con la instrucción sp_helptext

sp_helptext FuncionMesesaDias copié la estructura en un bloc de notas.
después de esto eliminé la función con la funcion drop function

apliqué nuevamente las instrucciones para cambiar el collation de la Base de Datos y ya no marcó ningún error.

Después de cambiado el collation volví a crear la función 'FuncionMesesaDias'  con la estructura que había copiado previamente en el bloc de notas


Una vez cambiado el collation de nuestra base de datos puede ser que algunas tablas que tienen campos con el collation anterior también tengan que ser modificadas, para ello se puede usar la sentencia:

ALTER TABLE [dbo].[nombre_de_tabla]
        ALTER COLUMN [nombredecampo] VARCHAR(3) COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI NULL


Quizá nos encontremos con algún error de que hay indices o llaves foraneas que dependen de este campo, si ese fuera el caso no queda otro remedio que eliminar los indices que hagan referencia al campo que queremos modificar.

DROP INDEX  nombre_de_indice ON nombre_de_tabla


En caso de que no puedas modificar la estructura de las tablas para cambiar los collation lo que puedes hacer es utilizar la siguiente instrucción:

SELECT ID
FROM Mi_taba_1
INNER JOIN Mi_Tabla_2
WHERE Mi_tabla_1.Collation1Col COLLATE DATABASE_DEFAULT
Mi_Tabla_2.Collation2Col COLLATE DATABASE_DEFAULT



¡Suerte!

Mis Mejores Saludos
Xavier García








Select Top en una consulta SQL

SELECT TOP EN SQL SERVER

Algunas veces nos interesa obtener solo algunos registros de una consulta en SQL server.

Por ejemplo, si tenemos la tabla "Empleados" con 10 registros, y a nosotros solamente nos interesa obtener los últimos 4 empleados que se han dado de alta en la empresa, entonces podemos hacer uso de la sentencia TOP y del ordenamiento Order By

Te dejo los script para que puedas crear la tabla empleados y para que insertes algunos valores de Prueba:

-- Creamos la tabla Empleados
CREATE TABLE EMPLEADOS(
ID_EMPLEADO INT NOT NULL,
NOMBRE VARCHAR(100) NOT NULL,
FECHA_INGRESO DATETIME NOT NULL)

-- Insertamos 10 registros a la tabla empleados, con una fecha de ingreso aleatoria
INSERT INTO EMPLEADOS SELECT 1 , 'JUAN', '20160115'
INSERT INTO EMPLEADOS SELECT 2 , 'PEDRO', '20160201'
INSERT INTO EMPLEADOS SELECT 3 , 'JACINTO', '20160101'
INSERT INTO EMPLEADOS SELECT 4 , 'LUCAS', '20140101'
INSERT INTO EMPLEADOS SELECT 5 , 'RENE', '20130115'
INSERT INTO EMPLEADOS SELECT 6 , 'JULIO', '20120201'
INSERT INTO EMPLEADOS SELECT 7 , 'RAMON', '20100101'
INSERT INTO EMPLEADOS SELECT 8 , 'ALEX', '20160101'
INSERT INTO EMPLEADOS SELECT 9 , 'ANDY', '20140115'
INSERT INTO EMPLEADOS SELECT 10 , 'FRANCISCO', '20130201'

Ahora, aplicamos el Select Top para que la consulta solo nos traiga los 4 primeros empleados que se dieron de alta, aplicando el ordenamiento descendente  en el campo fecha_ingreso

La consulta quedaría de la siguiente Manera:
SELECT TOP 4 ID_EMPLEADO, NOMBRE, FECHA_INGRESO
FROM EMPLEADOS
ORDER BY FECHA_INGRESO DESC

el resultado es el siguiente:
Select Top en SQL Server

Este tipo de sentencia TOP es útil cuando tenemos miles de registros y queremos traernos solo algunos. 

Mis mejores Saludos
Xavier García


Como Hacer un Left Join en SQL Server

En este artículo te explico Como hacer un Left Join en Sql Server,

Un Left Join en SQL significa que al cruzar dos tablas A (Izquierda) y B (Derecha) nos interesa que todos los resultados de la tabla A se obtengan aunque algunos resultados de B no coincidan al relacionar las dos tablas por el campo relacionado.

Pero como es dificil entenderlo con Teoría voy a explicarlo con un caso práctico.

Tenemos la tabla Empleados que contiene el ID de los Empleados y su nombre:

Como hacer un Left Join en SQL Server

Por otra parte tenemos la tabla Cantidad_Hijos en la que se almacena el ID del empleado y la cantidad de hijos que tiene cada uno de los empleados (si es que tienen hijos, )


Al realizar un Left Join de la tabla empleados con la tabla Cantidad_Hijos, relacionándolos por el campo en común id_empleado este sería el resultado:

Resultado de Left Join

Como puedes ver en el ejemplo en la tabla empleados se dieron de alta 4 personas, sin embargo el empleado con el id 4  (Lucas) no tiene hijos, entonces en la tabla cantidad_hijos no existe su id, es por eso que en el resultado del left join el campo id_empleado y el campo hijos aparecen con valor NULL

Te dejo el script para que puedas crear las tablas y realizar el ejemplo por ti mismo:

-- CREANDO LA TABLA EMPLEADOS
CREATE TABLE EMPLEADOS(
ID_EMPLEADO INT NOT NULL,
NOMBRE VARCHAR(100) NOT NULL)

-- AÑADIENDO VALORES A LA TABLAS EMPLEADOS
INSERT INTO EMPLEADOS SELECT 1 , 'JUAN'
INSERT INTO EMPLEADOS SELECT 2 , 'PEDRO'
INSERT INTO EMPLEADOS SELECT 3 , 'JACINTO'
INSERT INTO EMPLEADOS SELECT 4 , 'LUCAS'

-- CREANDO LA TABLA CANTIDAD_HIJOS
CREATE TABLE CANTIDAD_HIJOS(
ID_EMPLEADO INT NOT NULL,
HIJOS INT NOT NULL)

-- AÑADIENDO VALORES A LA TABLAS CANTIDAD_HIJOS
INSERT INTO CANTIDAD_HIJOS SELECT 1 ,2
INSERT INTO CANTIDAD_HIJOS SELECT 2 ,1
INSERT INTO CANTIDAD_HIJOS SELECT 3 ,3

-- APLICANDO EL LEFT JOIN 
SELECT E.*, CH.*
FROM EMPLEADOS AS E LEFT JOIN 
CANTIDAD_HIJOS AS CH ON
E.ID_EMPLEADO = CH.ID_EMPLEADO


Como hacer un Left Join en Sql Server