Basta con ejecutar el Programa de Importar y Exportar Datos del grupo de SQLServer. Se ejecutará un asistente
Concepto |
MySQL |
SQLServer |
Declaración de variables |
DECLARE sal int; |
DECLARE @sal int; |
Asignación de variables |
SET sal=33; |
SELECT @sal = 33; |
Asignación de valores procedentes de una consulta |
SELECT salario INTO sal FROM templa WHERE nuempl=n; |
SELECT @sal = salario FROM templa WHERE nuempl=@n; |
Instrucción condicional |
IF (sal IS NULL) THEN SET sal=0; ELSE SET sal=sal+100; END IF; |
IF(@sal IS NULL) BEGIN SELECT @sal=0; END ELSE BEGIN SELECT @sal=@sal+100; END END |
Las diferencias las vemos con un ejemplo que hace lo mismo en MySQL y SQLServer
CREATE FUNCTION `prueba`() RETURNS varchar(50) BEGIN
-- Variables auxiliares DECLARE a varchar(50); DECLARE b int; DECLARE cantidad int DEFAULT 0;
-- El Cursor DECLARE acabado BOOLEAN DEFAULT FALSE; DECLARE salchichon CURSOR FOR SELECT apellido,salario FROM templa; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET acabado = TRUE;
-- Comienza el recorrido del cursor OPEN salchichon; FETCH salchichon INTO a, b; REPEAT SET cantidad=cantidad+b; FETCH salchichon INTO a, b; UNTIL acabado END REPEAT; CLOSE salchichon;
-- Devolvemos la respuesta RETURN concat('La pasta total es: ',cantidad);
END |
CREATE FUNCTION prueba() RETURNS varchar(50) AS BEGIN
-- Variables auxiliares DECLARE @a varchar(50); DECLARE @b int; DECLARE @cantidad int=0;
-- El Cursor
DECLARE salchichon CURSOR FOR SELECT apellido,salario FROM templa;
-- Recorrido del cursor OPEN salchichon; FETCH NEXT FROM salchichon INTO @a,@b; WHILE @@fetch_status=0 BEGIN SELECT @cantidad=@cantidad+@b; FETCH NEXT FROM salchichon INTO @a,@b; END CLOSE salchichon;
-- Devolvemos la respuesta RETURN ‘La pasta total es: ‘ * CAST(@cantidad AS varchar);
END |
Ejemplos de funciones:
Función1(): declara, asigna y devuelve el valor de una variable
CREATE FUNCTION [dbo].[funcion1]()RETURNS int AS
BEGIN
DECLARE @resultado int;
SELECT @resultado = 33;
RETURN @resultado;
END
Ejecución: SELECT dbo.funcion1();
funcion2(): se le pasa un numero de factura y devuelve el numero de líneas que tiene
ALTER FUNCTION [dbo].[funcion2](@a int) RETURNS int AS
BEGIN
DECLARE @resultado int;
SELECT @resultado = COUNT(*) FROM lineas_factura WHERE num_fact=@a;
RETURN @resultado;
END
funcion3(): recibe 2 números, los multiplica y utiliza IF. (Ver el uso de BEGIN..END para delimitar un bloque de varias instrucciones)
ALTER FUNCTION funcion3(@a int,@b int) RETURNS varchar(25) AS
BEGIN
DECLARE @respuesta varchar(25);
DECLARE @c int;
SELECT @c=@a*@b;
if(@c>50) BEGIN
SELECT @respuesta='Es mayor de 50';
SELECT @c=@c+1;
END
else BEGIN
SELECT @respuesta='Numero muy pequeño';
SELECT @c=@c-1;
END
RETURN @respuesta+' '+CAST(@c AS char);
END
GO
funcion4(): devuelve la media de los productos que valen más de 3 euros utilizando el desplazamiento entre registros mediante un CURSOR
ALTER FUNCTION [dbo].[funcion4]() RETURNS double precision AS
BEGIN
DECLARE @cod integer;
DECLARE @nom varchar(25);
DECLARE @pre double precision;
DECLARE @acumulador double precision;
DECLARE @contador int;
select @acumulador=0;
select @contador=0;
DECLARE todo cursor FOR select cod_art,descripcion,precio from articulos;
open todo;
fetch next from todo into @cod,@nom,@pre;
while @@fetch_status=0 begin
if @pre>3 BEGIN
SELECT @acumulador=@acumulador+@pre;
SELECT @contador=@contador+1;
END
fetch next from todo into @cod,@nom,@pre;
end
return @acumulador/@contador;
END
MOD6 COMUNICACIÓN PREVIA AL TRASPASO DE TITULARIDAD DE LICENCIA
QUIERO COMPRAR O COGER UN TRASPASO ( MARQUE CON
REAL DECRETO 18661995 DE 17 DE NOVIEMBRE DE TRASPASO
Tags: access a, traspaso, access, sqlserver, hacer, datos