Tips de desarrollo SQL SERVER, ASP.NET, C#, MVVM, WCF, WPF, XAMARIN, AZURE etc
sábado, 20 de agosto de 2022
SQL LEN() DE UN DATO NULL
domingo, 14 de agosto de 2022
Obtener el día de la semana en sql Server
Obtener el día de la semana en sql Server
SELECT (CASE DATENAME(dw,GETDATE())
when 'Monday' then 'LUNES'
when 'Tuesday' then 'MARTES'
when 'Wednesday' then 'MIERCOLES'
when 'Thursday' then 'JUEVES'
when 'Friday' then 'VIERNES'
when 'Saturday' then 'SABADO'
when 'Sunday' then 'DOMINGO'
END)
Modificar columna de tabla sql para que no sea null
Modificar columna de tabla sql para que no sea null
Solucion:
Sintax
ALTER TABLE table_name
ADD column_name datatype;
UPDATE persona SET nombre="0" WHERE nombre IS NULL; ALTER TABLE persona ALTER COLUMN nombre varchar NOT NULL;
viernes, 29 de julio de 2022
Usar una variable en un LIKE sql server
Usar una variable en un LIKE sql server
Ejemplo:
ALTER PROCEDURE <Name>
(
@PartialName VARCHAR(50) = NULL
)
SELECT Name
FROM <table>
WHERE Name LIKE '%' + @PartialName + '%'
jueves, 16 de junio de 2022
Cannot truncate table 'XXXX' because it is being referenced by a FOREIGN KEY constraint.
Cannot truncate table 'esquema.tutabla' because it is being referenced by a FOREIGN KEY constraint
Error:
Msg 4712, Level 16, State 1, Line 1
Cannot truncate table 'esquema.tutabla' because it is being referenced by a FOREIGN KEY constraint.
Solucion, primero tienes que eliminar las dependecias hijas de la tabla, despues ejecuta el siguiente script:
unicamente tienes que llenar el esquema y el nombre de tu tabla a truncar
lunes, 6 de junio de 2022
Renombrar COLUMNA SQL server
Sintaxis
EXEC sp_rename 'esquema.tabla.columna', 'nombrenuevodecolumna', 'COLUMN';
Ejemplo:
EXEC sp_rename 'dbo.cfdparse.noTasaIrs', 'noTasaISR', 'COLUMN';
jueves, 2 de junio de 2022
Eliminar los caracteres de espacio en blanco de una cadena en SQL Server
Intento eliminar espacio en blanco con rtrin, trin y ltrim pero no funciona.
Solucion:
martes, 31 de mayo de 2022
Eliminar filas duplicadas de una tabla de SQL Server
DELETE T
FROM
(
SELECT *
, DupRank = ROW_NUMBER() OVER (
PARTITION BY nombre
ORDER BY (SELECT NULL)
)
FROM Nombres
) AS T
WHERE DupRank > 1
Elimina los registros duplicados en este caso nombre es la columna que tiene los valores duplicados.
martes, 24 de mayo de 2022
SQL: COMO OBTENER FECHA DE INICIO Y FIN DE SEMANA
En base a la fecha de hoy obtiene el dia en que inicia y finaliza la semana:
miércoles, 2 de marzo de 2022
Obtener días del mes SQL
Con la siguiente consulta te permite obtener una lista de los dias de un mes, pide como parametros de entrada el mes y el año
Resultado:
Obtener Descripcion de dia sql
De esta forma podrías obtener el nombre del día de la semana pero lo devolvería en inglés.
SELECT DATENAME(weekday,
getdate()) AS nombreDiaSemana;
Por lo tanto, lo más recomendable sería traer el número del día de la semana y mediante el uso de casos ir determinando el nombre del día de la semana.
SELECT (case DATEPART(dw,getdate()) when 2 then 'Lunes' when 3 then 'Martes' when 4 then 'Miércoles' when 5 then 'Jueves' when 6 then 'Viernes' when 7 then 'Sábado' when 1 then 'Domingo' end) AS nombreDiaSemana;
jueves, 23 de diciembre de 2021
Ver el número de línea en el SQL Server Management Studio
Por default viene sin esta configuración y se ve de esta manera:
Para configurar nos vamos a tolos/ Options
Marcamos el check Line numbers y le damos OK
Y Listo…
SP_WHO2 Tunning BD Monitoreo
Con sp_who2 se puede saber que procesos estan corriendo en el momento
Con la siguiente consulta se puede ver cual es la sentencia que se esta ejecutando en base al SPID:
Obtendrá como resultado el SP o fracción de consulta que se esta ejecutando.
martes, 27 de julio de 2021
Replication – Execution of filter stored procedure xxxx failed. See the SQL Server errorlog for more information.
Execution of filter stored procedure 1288585956 failed. See the SQL Server errorlog for more information.
The Log-Scan Process failed to construct a replicated command from log sequence number (LSN) {005765c9:0000bb74:0002}. Back up the publication database and contact Customer Support Services.
El error anterior indica que Log Reader Agent está bloqueado en LSN {0001d651: 00002a49: 0006} y no puede leer ni crear un comando para este LSN.
Como el Agente de lectura de registros está atascado en el LSN, no avanza y ya que solo podemos tener 1 Agente de lectura de registros en Replicación transaccional que se utiliza para todas las publicaciones. Todas las publicaciones muestran errores en el monitor de replicación y no avanzan.
Verificamos la transacción en el LSN {0001d651: 00002a49: 0006}.
En el error anterior, vemos "Error en la ejecución del procedimiento almacenado del filtro 2048634987"
. Verificamos el ID del procedimiento almacenado del filtro de sysarticles y descubrimos que era el procedimiento almacenado del filtro para la tabla dbo.booking
SELECT * FROM sys.dm_cdc_errors
Sin embargo, la entrada de el procedimiento almacenado del filtro faltaba en las tablas sysobjects, lo que indica que el procedimiento almacenado del filtro se eliminó por alguna razón. Para confirmar esto usamos la siguiente consulta
select * from (select art.name as article_name
, art.pubid as publication_id
, art.artid as article_id
, art.filter as filter_proc_id
, isnull(obj.name,'## MISSING!! ##') as filter_proc_name
from sysarticles art left outer join sys.objects obj
on art.filter = obj.object_id
where art.filter > 0)as results
solución
Eliminé la publicación, la recreé y luego creé una suscripción sin inicialización. esto impidió una instantánea completa.
O
Entonces, para resolver esto, identificamos las publicaciones de la tabla syspublications con pubid = 750.
Luego eliminamos el filtrado para los 3 artículos anteriores y los volvimos a agregar y el procedimiento almacenado se volvió a crear.
Luego recreamos la instantánea para esa publicación y marcamos su suscriptor para reinicializar.
El agente de instantáneas volvió a crear la instantánea y el agente de lector de registros comenzó a funcionar correctamente sin errores.
Verificamos el Monitor de replicación y el error desapareció.
domingo, 11 de octubre de 2020
Convertir DataReader a DataTable C# (SqlDataReader to DataTable)
Puede cargar un archivo DataTable
directamente desde un lector de datos utilizando el Load()
método que acepta un archivo IDataReader
.
var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
o
var dataTable = new System.Data.DataTable(); var dt = new System.Data.DataTable();
SqlDataReader dr;
dr = cmd.ExecuteReader();
if (dr.Read())
{
dataTable.Load(dr);
dt = dataTable;
}
lunes, 17 de agosto de 2020
ACTUALIZAR ESTADISTICAS SQL (TODAS LAS TABLAS)
ACTUALIZAR ESTADISTICAS SQL (TODAS LAS TABLAS)
SET NOCOUNT ON
DECLARE @SQLcommand NVARCHAR(512),
@Table SYSNAME
DECLARE curAllTables CURSOR FOR
SELECT table_schema + '.[' + table_name + ']'
FROM information_schema.tables
WHERE TABLE_TYPE = 'BASE TABLE'
order by table_name
OPEN curAllTables
FETCH NEXT FROM curAllTables
INTO @Table
WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT N'UPDATING STATISTICS FOR TABLE: ' + @Table
SET @SQLcommand = 'UPDATE STATISTICS ' + @Table + ' WITH FULLSCAN'
EXEC sp_executesql @SQLcommand
FETCH NEXT FROM curAllTables
INTO @Table
END
CLOSE curAllTables
DEALLOCATE curAllTables
SET NOCOUNT OFF
GO
Cómo establecer nivel de compatibilidad para SQL Server 2008 o 2005 Database
Cómo establecer nivel de compatibilidad para SQL Server 2008 o 2005 Database
[Microsoft][ODBC SQL Server Driver][SQL Server][Msg 4147, Level 15, State 1, Line 4] The query uses non-ANSI outer join operators (“*=” or “=*”). To run this query without modification, please set the compatibility level for current database to 80, using the SET COMPATIBILITY_LEVEL option of ALTER DATABASE. It is strongly recommended to rewrite the query using ANSI outer join operators (LEFT OUTER JOIN, RIGHT OUTER JOIN). In the future versions
of SQL Server, non-ANSI join operators will not be supported even in backward-compatibility modes.
For example, SQL query below is not valid:
SELECT o.name FROM sys.objects o, sys.views v WHERE o.object_id *= v.object_id;
And should be replaced with the following code:
SELECT o.name FROM sys.objects o LEFT JOIN sys.views v ON o.object_id = v.object_id;
Or the following abbreviated inner join statement:
SELECT o.name FROM sys.objects o, sys.views v WHERE o.object_id = v.object_id;
For administrator who can’t change the code, the easiest workaround is to revert the compatibility level of the database in order to provide the backward compatibility to old-style joins. sp_dbcmptlevel stored procedures (deprecated) or Transact-SQL can be used to set certain (partially, not all) database behaviors to be compatible with the earlier version of SQL Server. This MSDN article provides overview on what behaviors are changed on each compatibility level.
Version of SQL Server that can be reverted to can be one of the following:
60 = SQL Server 6.0
65 = SQL Server 6.5
70 = SQL Server 7.0
80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008
Note: Compatibility level 60, 65, and 70 no longer available in SQL Server 2008. And future version of SQL Server will support only two (2) prior version of backward compatibility. A database containing an indexed view cannot be changed to a compatibility level lower than 80. Do also take note that when a database is set to backward-compatibility mode, some of the new functionalities may be lost, such as SQL CLR support and SSMS diagrams for the database. Beside, the compatibility mode affects behaviors only for the specified database, not for the entire server.
Steps to Change and Set Compatibility Level of A Database in SQL Server
The following SQL commands can be issued in SQL Server Management Studio Query window. Remember to execute Go after each command.
- Optional: Set the database to single user access mode:
ALTER DATABASE database_name SET SINGLE_USER; - Set the
database compatibility level to one of the earlier version stated
above:
Transact-SQL Method
ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }
For example, - ALTER DATABASE my_db SET COMPATIBILITY_LEVEL
= 80
sp_dbcmptlevel Stored Procedure Method
EXEC sp_dbcmptlevel database_name, compatibility_level value;
For example,
EXEC sp_dbcmptlevel my_db, 90; - Optional: Put
back the database in multiuser access mode:
ALTER DATABASE database_name SET MULTI_USER;