ccc

Mostrando entradas con la etiqueta BD: SQL Server. Mostrar todas las entradas
Mostrando entradas con la etiqueta BD: SQL Server. Mostrar todas las entradas

Triggers: SQL Server

Se pueden crear fácilmente desde MSSMS o directamente mediante SQLs.

Hay que tener en cuenta que SQL Server cada vez que hace una inserción en una tabla crea una tabla temporal (que luego borra) llamada Inserted.

Si hace un delete crea una tabla temporal llamada deleted

Si hace un update crea las tablas temporal deleted e inserted.

Para crear los triggers sería:
create trigger TR_productoInsertado
on productos for insert
AS
declare @cod_prod varchar(4)
select @cod_prod = cod_prod from inserted
insert into historial values (getdate(), @cod_prod, 'insertado', system.user)

create trigger TR_productoEliminado
on productos for delete
AS
declare @cod_prod varchar(4)
select @cod_prod = cod_prod from inserted
insert into historial values (getdate(), @cod_prod, 'eliminado', system.user)

create trigger TR_productoActualizado
on productos for update
AS
declare @cod_prod varchar(4)
select @cod_prod = cod_prod from inserted
insert into historial values (getdate(), @cod_prod, 'actualizado', system.user)

Importante: de las tablas temporales te permite extraer cualquier campo salvo el ID

Más información en:
https://www.youtube.com/watch?v=jLk4BtAKZUM

SQL Server: Procedimientos almacenados

Desde el Microsoft SQL Server Management Studio crear un procedimiento almacenado:

CREATE PROCEDURE buscando
(
@buscar varchar(30)
)
as
begin
SELECT titulo FROM peliculas  WHERE titulo LIKE '%' + @buscar + '%'
end

Y ya desde el PHP para llamarlo:
$server = "localhost\SQLEXPRESS01";
$cnnInfo = array("Database"=>"despotricador", "UID"=>"leandro", "PWD"=>"666666666","CharacterSet"=>"UTF-8");

$cnn = sqlsrv_connect($server, $cnnInfo);

if ($cnn) {
echo "BD: Conexión correcta<hr>";
}
else {
echo "BD: Error al conectar";
die( print_r( sqlsrv_errors(), true));
}


$sql = "EXEC dbo.buscando @buscar = ?";

$valor = 'i';
$params = array(
array($valor, SQLSRV_PARAM_IN)
);
$reg = sqlsrv_prepare($cnn, $sql, $params);
if (!sqlsrv_execute($reg)) {
    echo "Error";
    die;
}

 while ($row = sqlsrv_fetch_array($reg, SQLSRV_FETCH_ASSOC)) {
    echo $row["titulo"].":".$row["anno"]."<br>";
 }

Instalar SQL Server en tu ordenador localhost y acceder desde el XAMPP

1. Instalar SQL Server Express

https://www.microsoft.com/es-es/sql-server/sql-server-editions-express

2. Al instalarlo y ejecutarlo por primera vez te pondrá un link para instalar el Microsoft SQL Server Management Studio (si no te lo pidiera entonces descargalo e instalalo).

3. Una vez instalado el MSSMS logueate como "Windows Authentication" (es el superadmin).

4. Creas un usuario (por ejemplo "userenero") con:
- botón derecho en Security -> new login.
- No marques los checkbox ningún checkbox referente al password.
- En server roles marca que es dbcreator.

5. Te deslogueas del MSSMS y entras con ese usuario como "SQL Server Authetication" con los datos que has creado para ese usuario (si te da algún error busca ese error en Google, seguramente es que no tienes marcado en las opciones que puedas entrar tanto como "Windows Authentication" como con "SQL Server Authetication").

6. Una vez te has logueado con ese usuario crea una BD (por ejemplo "febrero") y crea una tabla (por ejemplo "clientes" y métele datos).

7. Para instalar en el XAMPP los controladores de SQL Server:

https://www.youtube.com/watch?v=UvAPWVkHfgE

Básicamente es instalar desde la web de Microsoft los ODBC Driver 17 for SQL Server y los controladores para SQL Server (los cuales copiarás en la carpeta de C:\xampp\php\ext).

Una vez hecho todo esto el código sería:
$server = "localhost\SQLEXPRESS01";
$cnnInfo = array("Database"=>"febrero", "UID"=>"userenero", "PWD"=>"12345678","CharacterSet"=>"UTF-8");

$cnn = sqlsrv_connect($server, $cnnInfo);

if ($cnn) {
echo "BD: Conexión correcta<hr>";
}
else {
echo "BD: Error al conectar";
die( print_r( sqlsrv_errors(), true));
}

$sql = "SELECT * FROM clientes";
$reg = sqlsrv_query($cnn, $sql);

 while ($row = sqlsrv_fetch_array($reg, SQLSRV_FETCH_ASSOC)) {
    echo $row["cliente"]."<br>";
 }

Más información sobre instrucciones en SQL Server:

https://docs.microsoft.com/es-es/sql/connect/php/sqlsrv-query?view=sql-server-ver15


MySQL: Convertir un campo escrito en la BD con caracteres utf-8 a modo correcto

SELECT CAST(BINARY(nombre) AS CHAR CHARACTER SET utf8) AS nombre, password, nick, email, validado, pais.descripcion as nomPais, rol.descripcion as nomRole FROM usuario inner join pais on pais.id_pais = usuario.pais inner join rol on rol.id_rol = usuario.rol

MySQL: Ejemplo de Having (se usa con group by)

select id_art_youtube, count(id_art_youtube) as total, nom_art_youtube, nom_foto from hist_youtube
inner join art_youtube on art_youtube.id = hist_youtube.id_art_youtube
group by id_art_youtube having total > 4 order by total desc, nom_art_youtube

MySQL y SQLServer: Concatenar el valor de dos o más campos en un único campo

select concat(campo1,"<br><br>",campo2,"<br><br>",campo3) as resumen, campo4, campo5 from tabla

El resutado de la query:
resumen, campo4, campo5

SQL Server: comparar fecha

Sacar si el último login ha estado desde 3 meses atrás hasta ahora:

SELECT * FROM mitabla WHERE usuario = '2345' AND ultimo_login > DATEADD(MM, -3,GETDATE())

Backup de toda una base de datos con PHP (tanto para MySQL como para SQL Server)

SQL Server:
$log_backup_file = "C:\Backups\TestDB_Log_Backup.bak";
$sql = "BACKUP LOG TestDB TO DISK = '".$log_backup_file."'";
$stmt = sqlsrv_query($conn, $sql);
if($stmt === false)
{
    die(print_r(sqlsrv_errors()));
}
else
{
    echo "Transaction log backed up to $log_backup_file";
}

MySQL:
$backup_file = "EDC_".date("Ymd_His").".sql";
$commands = array(
        "mysqldump --opt -h $host_name -u $user_name -p$password -v $database > $backup_file","bzip2 $backup_file"
);

// ejecución y salida de éxito o errores
foreach ( $commands as $command ) {
   system($command,$output);
   echo $output;
}

Mostrar error que genera una consulta a la BD

echo $db->Error En SQL Server si da el error:
Connection is busy with results for another hstmt
Significa que la query anterior no se ha limitado el número de resultados con TOP(1)

SQL Server: Crear tabla con campo autoincremento

CREATE TABLE pdfs (
  id              INT           NOT NULL    IDENTITY    PRIMARY KEY,
  titulo           VARCHAR(100)  NOT NULL,
  url_pdf  VARCHAR(100),
);

BD: SQL Server

<?php
$cnn = mssql_connect("localhost", "root", "") or die("Error al hacer la conexión");
$bd = mssql_select_db("mibasededatos", $cnn) or die("Error al conectar con la BD");

$query = "select * from pel_youtube where nom_pel_youtube like 'ba%'";
$result = mssql_query($query);

while($row = mssql_fetch_array($result)) {
  echo $row["nom_pel_youtube"]."<br>";
}
mssql_close($cnn);
?>

SQL Server: Operaciones

// Obtener solo el primer registro
select top 1 * from mitabla order by num_pag

//  Modificar un valor con el valor que ya tenga
update tabla set campo1 = campo1 + 1 where ...
update tabla set campo2 = "hola"+ campo2 where ...