tarea procedimientos procedimiento parametros funciones español ejemplos ejecutar consultas consulta con almacenado sql sql-server sql-server-2005

procedimientos - ¿Es posible ejecutar un archivo de texto desde una consulta SQL?



procedimientos y funciones oracle pl/sql (6)

Esto es lo que uso Funciona bien y es fácil de reutilizar. Se puede cambiar para leer todos los archivos en el directorio, pero de esta manera puedo controlar cuáles ejecutar.

/* execute a list of .sql files against the server and DB specified */ SET NOCOUNT ON SET XACT_ABORT ON BEGIN TRAN DECLARE @DBServerName VARCHAR(100) = ''servername'' DECLARE @DBName VARCHAR(100) = ''db name'' DECLARE @FilePath VARCHAR(200) = ''path to scrips/' /* create a holder for all filenames to be executed */ DECLARE @FileList TABLE (Files NVARCHAR(MAX)) INSERT INTO @FileList VALUES (''script 1.sql'') INSERT INTO @FileList VALUES (''script 2.sql'') INSERT INTO @FileList VALUES (''script X.sql'') WHILE (SELECT COUNT(Files) FROM @FileList) > 0 BEGIN /* execute each file one at a time */ DECLARE @FileName NVARCHAR(MAX) = (SELECT TOP(1) Files FROM @FileList) DECLARE @command VARCHAR(500) = ''sqlcmd -S '' + @DBServerName + '' -d '' + @DBName + '' -i "'' + @FilePath + @Filename +''"'' EXEC xp_cmdshell @command PRINT ''EXECUTED: '' + @FileName DELETE FROM @FileList WHERE Files = @FileName END COMMIT TRAN

Tengo una cantidad de archivos .sql generados que quiero ejecutar en sucesión. Me gustaría ejecutarlos desde una declaración SQL en una consulta (es decir, Query Analyzer / Server Management Studio).
¿Es posible hacer algo como esto y, en caso afirmativo, cuál es la sintaxis para hacer esto?

Estoy esperando algo como:

exec ''c:/temp/file01.sql'' exec ''c:/temp/file02.sql''

Estoy usando SQL Server 2005 y ejecutando consultas en el estudio de administración.


Eche un vistazo a OSQL. Esta utilidad te permite ejecutar SQL desde el símbolo del sistema. Es fácil de instalar en un sistema, creo que viene con el SQL Server Express gratis.

Usando la utilidad osql

Una búsqueda rápida de "OSQL" en el desbordamiento de la pila muestra que hay muchas cosas disponibles.

Lo principal para manejar correctamente es el usuario y los parámetros de la cuenta de contraseña que se pasan en la línea de comando. He visto archivos por lotes que usan permisos de acceso a archivos NT para controlar el archivo con la contraseña y luego usar el contenido de este archivo para iniciar el script. También puede escribir un programa rápido C # o VB para ejecutarlo utilizando la clase Process.


No recomendaría hacer esto, pero si realmente lo necesita, entonces el procedimiento almacenado extendido xp_cmdshell es lo que desea. Primero tendrá que leer los contenidos del archivo en una variable y luego usar algo como esto:

DECLARE @cmd sysname, @var sysname SET @var = ''Hello world'' SET @cmd = ''echo '' + @var + '' > var_out.txt'' EXEC master..xp_cmdshell @cmd

Nota: xp_cmdshell ejecuta comandos en segundo plano, debido a esto, no debe usarse para ejecutar programas que requieren la entrada del usuario.


use xp_cmdshell y sqlcmd

EXEC xp_cmdshell ''sqlcmd -S '' + @DBServerName + '' -d '' + @DBName + '' -i '' + @FilePathName


O simplemente use openrowset para leer su script en una variable y ejecutarlo (lo siento por revivir un tema de hace 8 años):

DECLARE @SQL varchar(MAX) SELECT @SQL = BulkColumn FROM OPENROWSET ( BULK ''MeinPfad/MeinSkript.sql'' , SINGLE_BLOB ) AS MYTABLE --PRINT @sql EXEC (@sql)


Muy útil gracias, vea también este enlace: Ejecutar scripts de SQL Server para un ejemplo similar. Para activar y desactivar xp_cmdshell consulte a continuación:

En

SET NOCOUNT ON EXEC master.dbo.sp_configure ''show advanced options'', 1 RECONFIGURE EXEC master.dbo.sp_configure ''xp_cmdshell'', 1 RECONFIGURE

Apagado

EXEC master.dbo.sp_configure ''xp_cmdshell'', 0 RECONFIGURE EXEC master.dbo.sp_configure ''show advanced options'', 0 RECONFIGURE SET NOCOUNT OFF