Estructura de la tabla original
MES | NOMBRE | MONTO |
1 | JUAN | 2000 |
1 | PEDRO | 4000 |
1 | DIEGO | 7000 |
3 | PEDRO | 1000 |
2 | PEDRO | 6000 |
2 | JUAN | 8000 |
Nombre | ENERO | FEBRERO | MARZO |
DIEGO | 7000 | NULL | NULL |
JUAN | 2000 | 8000 | NULL |
PEDRO | 4000 | 6000 | 1000 |
USE msdb;
GO
SELECT items.subject,
items.last_mod_date
,l.description FROM dbo.sysmail_faileditems as items
INNER JOIN dbo.sysmail_event_log AS l
ON items.mailitem_id = l.mailitem_id
WHERE items.recipients LIKE '%gmail%'
OR items.copy_recipients LIKE '%gmail%'
OR items.blind_copy_recipients LIKE '%gmail%'
order by items.last_mod_date
A veces cuando usamos cursores dinamicos, por ejemplo:
SET @strOpenRowSet = 'SELECT * FROM OPENROWSET (' + '''Microsoft.ACE.OLEDB.12.0''' +',' + '''Excel 8.0;Database=' + @strPath+@strArchivo + ';HDR=Yes, imex=1'''+','+ '''SELECT * FROM [usuarios$]''' + ')'
SET @strSQL = 'DECLARE c_reg_xls CURSOR STATIC FOR ' + @strOpenRowSet
EXECUTE sp_executesql @strSQL
el cursor se ejecuta de modo local no como global, entonces para evitar el error se usa esta sentencia para dejar los cursores globales
ALTER DATABASE [ops_cmpcpec_v60]
SET CURSOR_DEFAULT GLOBAL
En este video te mostrare un mecanismo existente en SQL Server con el cual puedes cargar masivamente datos por medio de un archivo de texto plano, por ejemplo un archivo CSV.