saber que procesos esta ejecutando ejecucion como sql sql-server tsql sql-server-2008

procesos - como saber que se esta ejecutando en sql server



TransactSQL para ejecutar otra secuencia de comandos de TransactSQL (5)

Intente esto si está intentando ejecutar un archivo .sql en SSMS:

:r C:/Scripts/Script1.sql :r C:/Scripts/Script2.sql :r C:/Scripts/Script3.sql ...

nota: para que esto se ejecute, active el modo de comando sql (Consulta> Modo SQLCMD)

Si estos son scripts que ejecuta con bastante frecuencia, podría considerar dejarlos en un proceso almacenado y ejecutarlos de esa manera ...

También puede hacerlo a través de sqlcmd (que creo que es más común):

sqlcmd -S serverName/instanceName -i C:/Scripts/Script1.sql

Tengo 10 scripts transact SQL que crean una tabla y la completan con datos.

Estoy intentando crear 1 script maestro SQL que ejecutará cada uno de los otros 10 scripts.

¿Hay alguna forma con TSQL / TRANSACTSQL para Microsoft SQL Server 2008 de ejecutar otro script tsql desde el script tsql actual?

Esto está destinado a ejecutarse a través de SQL Server Management Studio (SSMS).

¡Gracias!


La forma más simple sería hacer que los scripts almacenan los procedimientos, y llamar (a través del comando EXECUTE ) cada procedimiento a su vez desde un procedimiento central. Esto es ideal si va a ejecutar exactamente el mismo script (s) una y otra vez (o el mismo script con diferentes parámetros pasados).

Si sus scripts son archivos .sql (o cualquier tipo de texto), como dice @Abe Miesller (upvoted), puede ejecutarlos desde SSMS a través del comando: r, cuando el modo SQLCMD está habilitado. Debería conocer y escribir la ruta y el nombre exactos del archivo. Esto no se puede hacer desde dentro de un procedimiento almacenado.

Una última alternativa, utilizable con nombres de archivo "conocidos" y necesaria para nombres de archivos arbitrarios (por ejemplo, todos los archivos cargados actualmente en una subcarpeta) es aprovechar la potencia del procedimiento extendido XP_CMDSHELL . Estas soluciones pueden obtener compelx bastante rápido (usarlo para recuperar la lista de archivos, compilar y ejecutar a través de xp_cmdshell una cadena que llame a SQLCMD para cada archivo, administrar resultados y errores a través de archivos de salida, etc.) así que solo haz esto como último recurso.


O simplemente usa openrowset para leer tu script en una variable y ejecutarlo:

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


Puede usar osql o mejor aún el sqlcmd más nuevo de manera casi intercambiable. Estoy usando osql en este ejemplo solo porque tuve una muestra de código pero en producción estoy usando sqlcmd. Aquí hay un código eliminado de un procedimiento más grande que utilizo para ejecutar scripts de actualización contra bases de datos. Se ordenan por mayor, menor, versión, compilación como yo nombro mis guiones usando esa convención para rastrear lanzamientos. Obviamente, se está perdiendo todo el manejo de errores, las partes donde extraigo las secuencias de comandos disponibles de la base de datos, las variables de configuración, etc., pero aún puede resultar útil este fragmento.

La parte principal que me gusta de usar osql o sqlcmd es que puedes ejecutar este código en sms, o en un procedimiento almacenado (llamado de forma programada tal vez) o desde un archivo por lotes. Muy flexible.

--Use cursor to run upgrade scripts DECLARE OSQL_cursor CURSOR READ_ONLY FOR SELECT FileName FROM #Scripts ORDER BY Major, Minor, Release, Build OPEN OSQL_cursor FETCH NEXT FROM OSQL_cursor INTO @name WHILE (@@fetch_status <> -1) BEGIN IF ((@@fetch_status <> -2) AND (@result = 0)) BEGIN SET @CommandString = ''osql -S '' + @@ServerName + '' -E -n -b -d '' + @DbName + '' -i "'' + @Dir + @name + ''"'' EXEC @result = master.dbo.xp_cmdshell @CommandString, NO_OUTPUT IF (@result = 0) BEGIN SET @Seconds = DATEDIFF(s, @LastTime, GETDATE()) SET @Minutes = @Seconds / 60 SET @Seconds = @Seconds - (@Minutes * 60) PRINT ''Successfully applied '' + @name + '' in '' + cast(@Minutes as varchar) + '' minutes '' + cast(@Seconds as varchar) + '' seconds.'' SET @LastTime = GETDATE() END ELSE BEGIN SET @errMessage = ''Error applying '' + @name + ''! The database is in an unknown state and the schema may not match the version.'' SET @errMessage = @errMessage + char(13) + ''To find the error restore the database to version '' + @StartingVersion SET @errMessage = @errMessage + '', set @UpToVersion = the last version successfully applied, then run '' + @name SET @errMessage = @errMessage + '' manually in Query Analyzer.'' END IF @name = (@UpToVersion + ''.sql'') GOTO CleanUpCursor --Quit if the final script specified has been run. END FETCH ENDT FROM OSQL_cursor INTO @name END


Suponiendo que quiera mantener los 10 scripts en sus propios archivos individuales, diría que la manera más fácil de hacer lo que desea sería crear un archivo por lotes que ejecute osql.exe para ejecutar los 10 scripts en el orden que desee.