Listar el nombre de una medida, la carpeta en la que se visualiza y su grupo de medidas

Usar las consultas para extraer información de los cubos es algo que pocas se menciona pero es muy práctico para ahorrar tiempo, especialmente cuando el cubo tiene muchos elementos y buscar uno a uno puede tomar algo de tiempo, incluso, puede usarse para desarrollar soluciones y visualizadores, hoy hablaremos de mdschema_measures la cual retorna información sobre las medidas, la siguiente consulta retorna el nombre del grupo de medidas, la carpeta y el nombre de la medida; La vista proporciona muchos más detalles sobre cada una de las medidas

select DISTINCT MEASUREGROUP_NAME, MEASURE_DISPLAY_FOLDER, MEASURE_NAME from $system.mdschema_measures
WHERE [CUBE_NAME]='NombreCubo' AND MEASURE_NAME = 'NombreMedida'

Espero sea de ayuda

FREDDY LEANDO ANGARITA CASTELLANOS
Data platform MVP
@flacMVP

[Code] cómo ejecutar n veces el texto seleccionado en SSMS

Hoy escuchando a Eladio Rincon @erincon en una presentación, mostró un truco que quiero compartir por considerarlo muy práctico

Es posible ejectar una instrucción n veces en el Management Studio de una manera muy simple sin necesidad de escribir código para iteraciones solo hay que usar GO n (siendo n el número de veces que quiero ejecutar el bloque seleccionado)

 

Entonces por ejemplo

 

select 1

go 10 

 

Presentará 10 veces 1 (lo ejecuta individualmente 10 veces) los invito a probarlo

 

Espero sea de ayuda,

FREDDY LEANDO ANGARITA CASTELLANOS
Sql Server MVP

 

 

[Code] Al ejecutar en SSMS es más rápido que al crearlo como procedimiento almacenado

Un caso extraño y que sucede más a menudo de lo esperado es cuando un procedimiento almacenado tarda más en ejecutarse que al hacer el mismo ejercicio en el editor de consultas de SSMS, en este artículo presentaré una técnica aprendida recientemente

 

El tema está con los parámetros: cuando tengo un procedimiento con el siguiente esquema:

create procedure MiProcedimiento
@Valor1 int,
@Valor2 varchar(50),
@valor3 date
as
begin 

............

y dicho procedimiento tarda mucho tiempo y no tarda mucho menos en SSMS sugiero intentar lo siguiente:

create procedure MiProcedimiento
@Valor1 int,
@Valor2 varchar(50),
@valor3 date
as
begin 

declare 
@Valor1Interna int = @Valor1,
@Valor2Interna varchar(50) = @Valor2,
@valor3Interna date =@Valor3

--Cuerpo del procedimiento

End

En mi experiencia he encontrado que al aplicar este truco el rendimiento del procedimiento es el mismo que el encontrado en SSMS, declarar las variables internamente favorece el rendimiento, no es necesario hacerlo en todas las ocaciones, pero resuelve el problema planteado

 

Espero sea de ayuda,

FREDDY LEANDO ANGARITA CASTELLANOS
Sql Server MVP

 

 

[How to] Ver la fecha de creación y modificación de los procedimientos almacenados

Saludos, algunas veces, para hacer control de cambios es necesario cuando modificamos un procedimiento almacenado, para hacerlo, se puede usar la siguiente instrucción

 

SELECT name, create_date, modify_date 

FROM sys.objects

WHERE type = ‘P’ 

order by modify_date desc

 

Espero sea de ayuda,

FREDDY LEANDO ANGARITA CASTELLANOS
Sql Server MVP

 

 

[Code] Cómo convertir un archivo DataCollector .blg a CSV

Saludos

Al hacer dianóstico de Sql Server (y de cualquier otro sistema que implemente correctamente instrumentación) se recurre a los data collectors para diagnosticas nuestro sistema, los archivos que dicha operación generan tienen la extensión .blg, los cuales al intentar analizarlos nos encontramos con un problema, dado que son archivos binarios, para convertirlos a CSV se puede usar la herramienta RELOG, la documentación se puede encontrar aquí

Un ejemplo:

relog -f csv MiArchivo.blg -o MiArchivoSalida.csv

 

Espero sea de ayuda,

FREDDY LEANDO ANGARITA CASTELLANOS
Sql Server MVP

 

 

[Code] Cómo obtener el valor que retorna un procedimiento almacenado al usar sp_executesql

Saludos, al revisar la documentación oficial de sp_executesql observo que no se presenta la forma de obtener el valor devuelto por un procedimiento almacenado, aquí un ejemplo:

create procedure MiProcedimiento
as
Begin
return 2 --Valor arbitrario
End


declare @script nvarchar(4000)
declare @filasAfectadas int = 0

set @script = 'exec @filasAfectadas = MiProcedimiento'
exec sp_executesql @script, N'@filasAfectadas int output', @filasAfectadas=@filasAfectadas output

print @filasAfectadas 

Al ejecutar el script de ejemplo observamos que se obtiene el resultado del valor devuelto por el procedimiento, la parte clave es pasar una variable marcada con output para tener el resultado

 

 

Espero sea de ayuda,

FREDDY LEANDO ANGARITA CASTELLANOS
Sql Server MVP

 

[Code] ¿Cuál es el tipo de datos de NULL por defecto en una consulta?

Desarrollando un aplicativo me encontré con la curiosidad de saber cuál sería el tipo de datos de una columna en donde sólo se indicara:

select null as A

 

¿Cual es el tipo de datos de la columna A?

 

La respuesta es int, ¿cómo lo determiné?, usando la técnica descrita en el artículo [Code] Cómo conocer la estructura de una tabla temporal 

El código usado es el siguiente:

select null as A
into #t 

exec tempdb..sp_help #t

drop table #t

 

Para especificar un tipo de datos en particular debemos hacer un cast al NULL

select cast(null as bit) as A
into #t 

exec tempdb..sp_help #t

drop table #t

 

Espero sea de ayuda,

FREDDY LEANDO ANGARITA CASTELLANOS
Sql Server MVP