martes, 25 de septiembre de 2018

131. Buscar una columna en toda la base de datos

Les dejo este script que les permite encontrar una columa en una base de datos

DECLARE @StrValorBusqueda NVARCHAR(100)

SET @StrValorBusqueda = '[Columna]'

CREATE TABLE #Resultado (NombreColumna NVARCHAR(370))

SET NOCOUNT ON

DECLARE @NombreTabla NVARCHAR(256)
,@NombreColumna NVARCHAR(128)

SET @NombreTabla = ''

WHILE @NombreTabla IS NOT NULL
BEGIN
PRINT @NombreTabla

SET @NombreColumna = ''
SET @NombreTabla = (
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @NombreTabla
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
)

WHILE (@NombreTabla IS NOT NULL)
AND (@NombreColumna IS NOT NULL)
BEGIN
if @NombreColumna like ('%' + @StrValorBusqueda + '%')
Begin
insert into #Resultado values(@NombreTabla + '.' + @NombreColumna)
End
SET @NombreColumna = (
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@NombreTabla, 2)
AND TABLE_NAME = PARSENAME(@NombreTabla, 1)
AND DATA_TYPE IN (
'char'
,'varchar'
,'nchar'
,'nvarchar'
)
AND QUOTENAME(COLUMN_NAME) > @NombreColumna
)
END
END

SELECT NombreColumna
FROM #Resultado

lunes, 6 de agosto de 2018

130. Si una tabla existe SQL

El siguiente Query permite determinar si una tabla existe en SQL

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = [Esquema] 
                 AND  TABLE_NAME = [Tabla]))
BEGIN
    --Codigo
END

viernes, 27 de julio de 2018

129. Query para obtener la fracmentacion de los indices de una base de datos

La fracmentacion de los indices es algo que se debe evitar esto principalmente por que indices fracmentados no ayudan a que una base opere correctamente.

El siguiente query permite revisar el estado de los indices de una base de dato de SQL server

SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName,
ind.name AS IndexName, indexstats.index_type_desc AS IndexType,
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind 
ON ind.object_id = indexstats.object_id
AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 30
ORDER BY indexstats.avg_fragmentation_in_percent DESC

jueves, 12 de julio de 2018

128. Queries mas pesados en una base de datos

Les dejo un script para determinar los queries mas pesados en una base de datos de Microsoft sql server

SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC

saludos

martes, 26 de junio de 2018

127. Buscar un dato dentro de toda una base de SQL server

Si bien esta es la peor idea que podemos tener, por que si tenemos tablas muy grandes el tiempo de búsqueda será muy alto además que al no tener índices por todas las columnas (ni intenten hacer esto, por que los índices deben estar apegados a los queries, y deberíamos trabajar del índice hacia el query,para tener los campos en orden y realmente poderlos ocupar), sobrecargamos el motor de la base de datos.


Bueno en que momento es necesario, es necesario cuando la base de datos no tiene un modelo, que esta se desarrollo de forma caótica, y que la información se encuentra perdida o duplicada.


Les dejo el Query, úsenlo con cuidado, y si lo van a usar en producción cuiden que no tengan en línea usuarios, que sea en una ventana de tiempo


declare @StrValorBusqueda nvarchar(100)
set @StrValorBusqueda = '[palabra a buscar]'
CREATE TABLE #Resultado (NombreColumna nvarchar(370), ValorColumna nvarchar(3630))
SET NOCOUNT ON
DECLARE @NombreTabla nvarchar(256),
@NombreColumna nvarchar(128),
@StrValorBusqueda2 nvarchar(110)
SET @NombreTabla = ''
SET @StrValorBusqueda2 = QUOTENAME('%' + @StrValorBusqueda + '%','''')
WHILE @NombreTabla IS NOT NULL
BEGIN
print @NombreTabla
SET @NombreColumna = ''
SET @NombreTabla =
(SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @NombreTabla
AND OBJECTPROPERTY(
OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0)
WHILE (@NombreTabla IS NOT NULL) AND (@NombreColumna IS NOT NULL)
BEGIN
--print '----' + @NombreColumna
SET @NombreColumna =
(SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@NombreTabla, 2)
AND TABLE_NAME = PARSENAME(@NombreTabla, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @NombreColumna)
IF @NombreColumna IS NOT NULL
BEGIN
INSERT INTO #Resultado
EXEC
('SELECT ''' + @NombreTabla + '.' + @NombreColumna + ''', LEFT(' + @NombreColumna + ', 3630)
FROM ' + @NombreTabla + ' (NOLOCK) ' + ' WHERE ' + @NombreColumna + ' LIKE ' + @StrValorBusqueda2)
END
END
END
SELECT NombreColumna, ValorColumna FROM #Resultado



Felices líneas

jueves, 5 de abril de 2018

126. ¿Que datos puedo obtener de mi sistema? II (powerShell)

La información del Bios es importante para cualquier administrador del sistema, esta se puede obtener de manera muy sencilla con el siguiente comando

Get-WmiObject -Class Win32_BIOS -ComputerName .


Felices Lineas

lunes, 2 de abril de 2018

125. ¿Que datos puedo obtener de mi sistema? I (PowerShell)

PowerShell nos da un acceso muy grande al sistema operativo, este y los próximos post veremos como obtener las características del equipo en el que estamos trabajando, esto puede ser importante para ver características de rendimiento del sistema

Get-WmiObject -Class Win32_Desktop -ComputerName .

Nos permite ver los escritorios de un equipo en particular


Felices Lineas