Se puede pasar un resultado de una consulta sql de líneas a un varchar que representaría una columna con la función: COALESCE siempre que no contenga ningún null el resultado de la consulta.
Ejemplo:
DECLARE @valores VARCHAR(1000)
SELECT @valores= COALESCE(@valores + ',', '') + valor FROM MiConsulta-Tabla
Valor es uno de los campos de MiConsulta-Tabla.
El resultado es un varchar concatenado por comas.
Tenemos la limitación de la longitud del varchar (Aunque lo definamos con MAX) pero nos puede ser útil para salir del paso.
Mostrando entradas con la etiqueta SQL Funciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL Funciones. Mostrar todas las entradas
viernes, 28 de noviembre de 2014
jueves, 3 de abril de 2014
Leer active directory desde SQL
Para acceder desde SQL al LDAP hay que linkar nuestro servidor del Active directory con el servidor de SQL donde queremos hacer la consulta.
La lista de campos disponibles desde el LDAP la podeis encontrar en el siguiente link: lista de campos
Lo primero es linkar el servidor de la siguiente manera_
Exec
sp_addlinkedserver 'ADSI'
, 'Active Directory Service Interfaces'
, 'ADSDSOObject'
, 'adsdatasource'
Le ponemos un usuario del dominio para que tenga acceso, bien con la instrucción:
EXEC sp_addlinkedsrvlogin 'ADSI', 'false', NULL, 'UsuarioDominio'
O desde las propiedades de la conexión creada (Servidores Vinculados)
En caso de que tengas el "Ad Hoc Distributed Queries" desabilitado, entonces corre esto para habilitarlo:
sp_configure 'show advanced options'
, 1
reconfigure
go
sp_configure 'Ad Hoc Distributed Queries'
, 1
reconfigure
go
Para ejcutar las consultas, se hace utilizando OpenQuery y de la siguiente manera:
SELECT * FROM OpenQuery(ADSI, 'SELECT physicalDeliveryOfficeName,sAMAccountName,cn,Name,displayName, sn,givenName,initials,moniker, personalTitle,generationQualifier ,userPrincipalName ,distinguishedName ,adsPath FROM ''LDAP://DC=mi-dominio,DC=local'' WHERE objectCategory=''user'' ')
La lista de campos disponibles desde el LDAP la podeis encontrar en el siguiente link: lista de campos
Lo primero es linkar el servidor de la siguiente manera_
Exec
sp_addlinkedserver 'ADSI'
, 'Active Directory Service Interfaces'
, 'ADSDSOObject'
, 'adsdatasource'
Le ponemos un usuario del dominio para que tenga acceso, bien con la instrucción:
EXEC sp_addlinkedsrvlogin 'ADSI', 'false', NULL, 'UsuarioDominio'
O desde las propiedades de la conexión creada (Servidores Vinculados)
En caso de que tengas el "Ad Hoc Distributed Queries" desabilitado, entonces corre esto para habilitarlo:
sp_configure 'show advanced options'
, 1
reconfigure
go
sp_configure 'Ad Hoc Distributed Queries'
, 1
reconfigure
go
Para ejcutar las consultas, se hace utilizando OpenQuery y de la siguiente manera:
SELECT * FROM OpenQuery(ADSI, 'SELECT physicalDeliveryOfficeName,sAMAccountName,cn,Name,displayName, sn,givenName,initials,moniker, personalTitle,generationQualifier ,userPrincipalName ,distinguishedName ,adsPath FROM ''LDAP://DC=mi-dominio,DC=local'' WHERE objectCategory=''user'' ')
jueves, 20 de febrero de 2014
Saber si una columna concreta existe en una tabla
Estoy trabajando en un proyecto que pretende ser adaptable a varias bases de datos. En el, surge la necesidad de saber en una consulta de SQL si un campo existe en una tabla concreta o no existe.La consulta para averiguarlo es así: SELECTCASE WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Empresa$Tabla' AND
COLUMN_NAME
= 'Columna') = 0 THEN 'NO TIENE COLUMNA Columna' ELSE 'SI TIENE COLUMNA Columna' END
Para averiguar si la Tabla existe sería así:
SELECTCASE WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = 'Empresa$Tabla') = 0 THEN 'NO TIENE TABLA Empresa$Tabla' ELSE 'SI TIENE TABLA Empresa$Tabla' END
WHERE
TABLE_NAME = 'Empresa$Tabla' AND
COLUMN_NAME
= 'Columna') = 0 THEN 'NO TIENE COLUMNA Columna' ELSE 'SI TIENE COLUMNA Columna' END
Para averiguar si la Tabla existe sería así:
SELECTCASE WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = 'Empresa$Tabla') = 0 THEN 'NO TIENE TABLA Empresa$Tabla' ELSE 'SI TIENE TABLA Empresa$Tabla' END
jueves, 31 de octubre de 2013
Crear un calendario en SQL
Para crear un calendario en sql que muestre todos los dias entre dos fechas he creado la siguiente funcion: CREATE
FUNCTION [dbo].[CALENDARIO]
(
-- Add the parameters for the function here
@fIni smalldatetime
,@fFin smalldatetime
)
RETURNS
@MyCalendario TABLE (FECHA smalldatetime)
BEGIN
DECLARE @d tinyint
SET @d = 0
WHILE @fIni <= @fFin
BEGIN
INSERT INTO @MyCalendario VALUES (@fIni)
SET @fIni = DATEADD(d, 1, @fIni)
END
RETURN
END
GO
Para hacer uso de ella es de la siguiente manera:
SELECT *FROM[dbo].[CALENDARIO] ('01/01/13','31/12/13') CALENDARIO
FUNCTION [dbo].[CALENDARIO]
(
-- Add the parameters for the function here
@fIni smalldatetime
,@fFin smalldatetime
)
RETURNS
@MyCalendario TABLE (FECHA smalldatetime)
BEGIN
DECLARE @d tinyint
SET @d = 0
WHILE @fIni <= @fFin
BEGIN
INSERT INTO @MyCalendario VALUES (@fIni)
SET @fIni = DATEADD(d, 1, @fIni)
END
RETURN
END
GO
Para hacer uso de ella es de la siguiente manera:
SELECT *FROM[dbo].[CALENDARIO] ('01/01/13','31/12/13') CALENDARIO
Suscribirse a:
Entradas (Atom)