MASTER..xp_cmdshell

07/10/2005 - 01:54 por JESUS | Informe spam
Buenas foro, como puedo obtener el contenido de un directorio en el
analizador de consultas para poder obtener el listado de scripts que he
modificado y mediante el MASTER..xp_cmdshell y el sql dinamico ejecutar
todo de un solo bloque, sin generar un archivo bat, muchas gracias

Preguntas similare

Leer las respuestas

#1 Isaias
07/10/2005 - 04:20 | Informe spam
Hola Jesus

Espero sirva para lo que quieres:

- inicio
de codigo
DECLARE @cDirSpec VARCHAR(255)
SET @cDirSpec = 'E:\DOCUMENTOS\PARCIALES\'

IF (@cDirSpec IS NULL)
BEGIN
SELECT -1, 'El directorio a consultar, es requerido '
RETURN(0)
END

CREATE TABLE #DirList (SeqNo INT NOT NULL IDENTITY,
LineText VARCHAR(255) NULL, Peso INT)

SET @iFileCount = 0

IF IsNull(RTrim(@cFileSpec),'') = ''
SET @cFileSpec = '*.WAV' -- Tipos de archivos a mostrar

SET @cDirSpec = RTrim(@cDirSpec)
IF @cDirSpec != '' and Right(@cDirSpec,1) != '\'
SET @cDirSpec = @cDirSpec + '\'

SET @cCmdStr = 'DIR ' + @cDirSpec + @cFileSpec

INSERT #DirList (LineText)
EXEC master..xp_cmdshell @cCmdStr

DELETE FROM #DirList WHERE SubString(LineText,1,1) = ' ' OR LineText IS NULL
UPDATE #DirList SET PESO = REPLACE(SubString(LineText,19,20),',','')

UPDATE #DirList SET LineText = SubString(LineText,40,255)

IF (SELECT TOP 1 LineText FROM #DirList) = ''
RETURN(0)

IF (SELECT TOP 1 LineText FROM #DirList) = ''
RETURN(0)

SELECT SeqNo as ID, LineText AS NameFile,
Peso, @cDirSpec as PATH
FROM #DirList ORDER BY LineText DESC,PESO
-fin de
codigo
Saludos
IIslas


"JESUS" escribió:

Buenas foro, como puedo obtener el contenido de un directorio en el
analizador de consultas para poder obtener el listado de scripts que he
modificado y mediante el MASTER..xp_cmdshell y el sql dinamico ejecutar
todo de un solo bloque, sin generar un archivo bat, muchas gracias



Respuesta Responder a este mensaje
#2 JESUS
07/10/2005 - 17:58 | Informe spam
Muchas gracias, aqui tengo el ejemplo para ver si se procesa todos los
scripts, si genera una linea con texto 'Line' significa error, espero les
sirva a todos y muchas gracias por el apoyo que me diste.

Basta con colocar los scripts en un directorio y seran cargados al sql,
tener presente que el shell se ejecutara en el servidor principal, por lo
tanto especifiquen bien el directorio, es local o de red.
- inicio
de codigo
DECLARE @cDirSpec VARCHAR(1000)
SET @cDirSpec = 'D:\pruescrip\'
declare @cFileSpec varchar(200), @iFileCount int, @cCmdStr varchar(1000)

IF (@cDirSpec IS NULL)
BEGIN
SELECT -1, 'El directorio a consultar, es requerido '
print 'El directorio a consultar, es requerido '
end
else
begin
print 'existe'
END
drop table #DirList
CREATE TABLE #DirList (SeqNo INT NOT NULL IDENTITY,
LineText VARCHAR(1000) NULL, Peso INT)

drop table #Result
CREATE TABLE #Result (SeqNo INT NOT NULL IDENTITY,
Texto VARCHAR(1000) NULL, Script varchar(200))

SET @iFileCount = 0

IF IsNull(RTrim(@cFileSpec),'') = ''
SET @cFileSpec = '*.sql'

SET @cDirSpec = RTrim(@cDirSpec)
IF @cDirSpec != '' and Right(@cDirSpec,1) != '\'
SET @cDirSpec = @cDirSpec + '\'
SET @cCmdStr = 'DIR ' + @cDirSpec + @cFileSpec
INSERT #DirList (LineText)
EXEC master..xp_cmdshell @cCmdStr

select * from #DirList
DELETE FROM #DirList WHERE SubString(LineText,1,1) = ' ' OR LineText IS NULL
select LineText from #dirlist
UPDATE #DirList SET PESO = REPLACE(SubString(LineText,19,20),',','')

UPDATE #DirList SET LineText = SubString(LineText,40,255)

IF (SELECT TOP 1 LineText FROM #DirList) = ''

IF (SELECT TOP 1 LineText FROM #DirList) = ''

SELECT SeqNo as ID, LineText AS NameFile,
Peso, @cDirSpec as PATH
FROM #DirList ORDER BY LineText DESC,PESO

declare CurListScrip cursor for select LineText from #DirList
declare @archi varchar(300)

open CurListScrip
fetch next from CurListScrip into @Archi
while @@fetch_status = 0
begin
select @cCmdStr = 'isql.exe -S FM_SERVER -U SA -P -d SGCI_NUEVO_CIERRE -i
"' + ltrim(rtrim(@cDirSpec)) + ltrim(rtrim(@Archi)) + '"' -- > ' +
ltrim(rtrim(@Archi)) + '.err'

INSERT #Result (Texto)
EXEC master..xp_cmdshell @cCmdStr
Update #Result set Script = ltrim(rtrim(@Archi)) where script is null
fetch next from CurListScrip into @Archi
end
close CurListScrip
deallocate CurListScrip



-fin de
codigo--
select * from #Result where patindex('%Line%',Texto)>0
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida