Archivos de Categoría: SQL Server

Ejecutar scripts grandes

Normalmente cuando ejecutamos un script SQL lo podemos hacer directamente abriéndolo con el Manager Studio pero cuando el fichero es grande (en mi caso eran más de 7 gigas), va a ser que no puede con ello así que toca buscar alternativas.
Hay herramientas de terceros que en teoría permiten su ejecución pero lo más sencillo es hacerlo desde una consola de MS-DOS:

sqlcmd -S SERVIDOR -i C:\script.sql

Y por supuesto, si hay que editar un fichero de ese tamaño, lo mejor es usar el Ultraedit

Consulta sobre palabras de una frase

Montando un buscador ha surgido la típica funcionalidad de que si introduces una frase, el cliente quiere que se busque por las palabras sueltas no por la frase. Normalmente lo hago desde PHP/Coldfusion (o lo que sea) creando dinámicamente que query pero buscando soluciones alternativas que pueda ejecutar desde un procedimiento almacenado (sin hacer un exec que queda feo) he encontrado esta posible solución:

declare @terminos varchar(max);
set @terminos = 'zapatos bolsos vestidos bufandas';


declare @cadena table (cadena varchar(500)) 
insert into @cadena values (@terminos)
;WITH Vals AS (
	SELECT  cadena,
		CAST('<d>' + REPLACE(cadena, ' ', '</d><d>') + '</d>' AS XML) XmlColumn
	FROM    @cadena
)

SELECT C.value('.','varchar(max)') palabra
FROM    Vals
CROSS APPLY Vals.XmlColumn.nodes('/d') AS T(C)
where len(C.value('.','varchar(max)')) > 1
-- Este último where es para que solo coja las palabras con longitud superior a un carácter

Y esto lo implementaríamos por ejemplo insertando las palabras sueltas en una tabla que usemos luego para hacer un inner join de la siguiente forma:

declare @palabras table (palabra varchar(500)) 

insert into @palabras
SELECT C.value('.','varchar(max)') palabra
FROM    Vals
CROSS APPLY Vals.XmlColumn.nodes('/d') AS T(C)
where len(C.value('.','varchar(max)')) > 1

-- y la consulta resultante sería asi:
select * from productos p 
inner join @palabras tmp on p.descripcion like '%'+tmp.palabra+'%'

 

Insertar cadena dentro de otra en una posición determinada

No sé ni cómo ha surgido la necesidad pero aquí está el uso de la función STUFF:

SELECT STUFF('abcdef', 2, 0, 'HHH');

Para la explicación mejor verlo en la documentación de SQL Server: http://msdn.microsoft.com/es-es/library/ms188043.aspx