Archive

Archive for the ‘SQL SERVER’ Category

Remove hour in DateTime variable using SQL SERVER

febrero 3, 2013 Deja un comentario


When is using DateTime var and save date and hour, the problem is using filters of date only, example:

register1 01/01/2010 01:01:12
register2 02/01/2010 12:50

I run a filter that return all registers of december 2 to january 2 :

SELECT Register FROM Registers

WHERE dateRegister BETWEEN ‘02/12/2009’ AND ‘02/01/2010’

 

This return 1 register only, because the register 2 has date greater than the filter

The solution is to convert varchar to datetime:


SELECT Register

FROM Registers
WHERE CONVERT(DateTime,CONVERT(varchar, Fecha , 101),103)
BETWEEN ‘02/12/2009’ AND ‘02/01/2010’


it works!!

Generar consecutivos dinámicos Sql Server

enero 16, 2013 Deja un comentario

 

Muchas veces los clientes nos piden generar un consecutivo dinámico con un formato específico y particular cada vez que se genere un registro.

Para ello les dejo entonces el código para una tabla que se llama eventos como en se usa como valor fijo “ER-“ y el valor dinámico del consecutivo se describe en corchetes [0-9].

 

DECLARE @LastCode as  NVarchar(200);

DECLARE @Consecutive as  NVarchar(200);

DECLARE @NextValue as  NVarchar(200);

DECLARE @NewCode as  NVarchar(200);

 

set @LastCode = (SELECT Codigo FROM Eventos WHERE Codigo = (SELECT MAX(Codigo) FROM Eventos WHERE Codigo LIKE ‘ER-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]’))

set @Consecutive = SUBSTRING(@LastCode,4,7);

set @NextValue = @Consecutive + 1;

set @NewCode = ‘ER-‘ + @NextValue;

 

print @LastCode;

print @Consecutive;

print @NextValue;

print @NewCode;

 

ER-2000212   — Ultimo código ingresado

2000212      — valor del ultimo consecutivo

2000213      — nuevo consecutivo

ER-2000213   — nuevo código

 

 

 

Script de Países y Ciudades para SQL SERVER

octubre 3, 2012 11 comentarios

Aveces necesitamos la información de las ciudades y países del mundo para nuestros sitios en web en múltiples idiomas y no tenemos como sacarlos, aveces nos toca recurrir a servicios externos.

Les dejo un script para crear los países y ciudades del mundo para sql server 2008 y 2012, lastimosamente no recuerdo de donde lo saque y no le puedo dar créditos al auto pero espero les sirva, si conocen algún otro lo pueden poner en los comentarios por favor:

CreacionPaisesCiudades

Exportar de Access a Sql Server usando ODBC

Bueno para pasar información de access a Sql server podemos utilizar la herramienta que nos trae access por defecto  y asi facilitar el trabajo, selecionamos el siguiente menú:

Access a Sql server 1

Nos pregunta a donde se va exportar, es decir como se llama la tabla que va crear o si ya existe a la que va exportar los datos:

Access a Sql server 2

Access a Sql server 2

Lo que tenemos que hacer es seleccionar ahora la conexión, que debe ser ODBC, lo mejor es tenerla obviamente ya configurada:

access a sql server 3

access a sql server 3

Por ultimo tendremos un ultimo mensaje que nos confirma si tuvo éxito la exportación, en el proceso les explico que access crea la tabla si no existe,  modifica los registros que existan y crea los que no exista. Espero les sirva a todos

Access a Sql server

Access a Sql server

De Transact SQL a PL/SQL – De SQL SERVER a ORACLE

abril 29, 2010 15 comentarios


Hola a todos y muchas gracias como siempre por estar al tanto de mi blog.
Les cuento que hace poco empecé a programar en PL/SQL con un curso que realice y pues me ha parecido muy interesante, le he encontrado las diferencias claras entre Transact de SQL server el cual es el sistema que más he manejado y ahora PL/SQL.
Siempre hay desventajas y ventajas de las cuales les hablare más adelante, por ahora les doy una breve introducción de que es Oracle y alguno comandos ara mirar de Transact a PL/SQL.

ORACLE:
Oracle es un gestor de base de datos muy robusto, basado en una tecnología cliente/servidor, el lenguaje ara su codificación es llamado PL/SQL también utilizado por PostgreSQL.
Actualmente es una de las bases de datos más robustas y completas del mercado pero con un alto costo.

Comandos de PL/SQL a TRANSACT SQL

Descripcion Comando SQL Equivalente oracle
Concatenacion de columnas + ||
Cambiar valor nulo ISNULL NVL
Conversion de datos CONVERT TO_DATE, TO_CHAR, TO_NUMBER
Comparacion con el valor NULL = NULL IS NULL
Extraer el año,mes,dia de fechas DATEPART(yy, DATE) EXTRAC(Year from DATE)
Creacion de un equaljoin SELECT t1,campo, t2,campo FROM table1 t1 INNER JOIN  table2 ON t2.campo = t1,campo SELECT t1,campo, t2,campo FROM table1 t1, table2 t2 WHERE t1,campo = t2,campo
Creacion de un outerJoin SELECT t1,campo, t2,campo FROM table1 t1 LEFT JOIN  table2 ON t2.campo = t1,campo SELECT t1,campo, t2,campo FROM table1 t1, table2 t2 WHERE t1,campo(+) = t2,campo
Poner todo en mayusuclas Upper(‘Cadena’)
Seleccionar un numero de filas especificas SELECT TOP Nº —–  ejemplo: Select top 1 SELECT * FROM tabla1 WHERE rownum <= 1
seleccionar un texto o un numero SELECT ‘Texto’ SELECT ‘Texto’ FROM dual
asignar valor a una variable SET variable  = valor variable := valor
Escribir en pantalla PRINT “CADENA” dbms_output.put_line(“cadena de texto”)
Saber cuantas filas afecto SQL%ROWCOUNT
Uso de cursores, recorrer un cursor CURSOR  datos IS SELECT * FROM EMPLOYEES; BEGIN FOR dat IN DATOS LOOP ——————- END LOOP
Condicion SI o IF IFCONDICION THEN BEGIN — END IF IF Condicion THEN — END IF;
Control de excepciones EXCEPTION
WHEN no_data_found then
Creacion de funciones CREATE OR REPLACE FUNCTION fn_funcionm(parametro number) BEGIN —— END;
Creacion de paquetes CREATE OR REPLACE PACKAGE PK_Paquete IS

Todos los comandos en Excel

Asignación de varias variables a una sola sentencia SELECT con SQL SERVER 2005

febrero 11, 2010 2 comentarios

Hace poco necesite realizar un select que por lógica solo devolvería siempre un solo registro con varis columnas, debía capturar estas y realizar una serie de operaciones con las variables pues bueno esto no es tan fácil como pensamos quiero pasarles el código para realizar esta operación y además el link de donde lo saque espero les sirva:

DECLARE
    @reserved INT,
    @rowcnt INT,
    @used INT

SET @reserved = -1
SET @rowcnt = -1
SET @used = -1

;WITH x AS
(
    SELECT
        reserved,
        rowcnt,
        used,
        COUNT(*) OVER(PARTITION BY 1) AS theCount
    FROM sysobjects so
    INNER JOIN sysindexes si ON si.id = so.id
    WHERE
        so.name = 'sysrowsets'
)
SELECT
    @reserved = reserved,
    @rowcnt = rowcnt,
    @used = used
FROM x
WHERE theCount =
    (
        SELECT
            number
        FROM master..spt_values
        WHERE
            TYPE = 'p'
            AND number BETWEEN 1 AND theCount
    )

SELECT @reserved, @rowcnt, @used

Link de referencia


Agradecimeintos a: Camilo Jaramillo

Remover la hora en una variable DateTime usando SQL SERVER

enero 27, 2010 4 comentarios


Aveces utilizamos variables DateTime y guardamos fecha y hora, por ejemplo en una tabla de LOG, pero el problema es que luego deseamos realizar un filtro solo por la fecha y tendremos problemas les podre un ejemplo:
Registro1 01/01/2010 01:01:12
Registro2 02/01/2010 12:50


Si quiero realizar un filtro que devuelva todos los registros del 2 de diciembre al 2 de enero seria asi:

SELECT Registro FROM Registros 
WHERE Fecha BETWEEN ‘02/12/2009’ AND ‘02/01/2010’ 


Solo me traerá el registro uno, ya que al tomar la hora toma la Fecha de registro2 con una fecha mayor a la ingresada en el filtro .
La solución es realizar una doble conversión primero a Varchar y luego a DateTime

SELECT Registro
FROM Registros 
WHERE CONVERT(DateTime,CONVERT(varchar, Fecha , 101),103)
BETWEEN ‘02/12/2009’ AND ‘02/01/2010’ 


De esta manera pueden quitar la hora, tanto para comprar como para algún dato que entre como parámetro algún procedimiento almacenado o función. pueden jugar con el formato de la conversion si quieren otro tipo de resultados.
Espero que a todos les sirva, si les sirve me cuentan :).