Si desea exportar todos los disparadores de la base de datos ... aquí hay algo de código:
DECLARE @vchServerName VARCHAR(500)
DECLARE @vchDBName VARCHAR(500)
DECLARE @intLoop INTEGER
DECLARE @intTotalRows INTEGER
DECLARE @intId INTEGER
DECLARE @vchName VARCHAR(500)
DECLARE @vchSQL VARCHAR(4000)
-- supress count (just so log looks nicer!)
SET NOCOUNT ON
-- get current DB and server
SET @vchDBName = DB_NAME()
SET @vchServerName = @@servername
-- get list of XXX
SELECT ROW_NUMBER() OVER (ORDER BY o.object_id) fldRowNum
,o.object_id fldId
,s.name + '.' + o.name fldName
INTO #tblFound
FROM sys.objects o
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE [type] = 'TR'
SET @intTotalRows = @@ROWCOUNT
SET @intLoop = 1
-- loop thru list
WHILE @intLoop <= @intTotalRows
BEGIN
SELECT @intID = fldId
,@vchName = fldName
FROM #tblFound
WHERE fldRowNum = @intLoop
PRINT 'Exporting ' + @vchName + '...'
-- NOTE: I'm using a version of bcp that doens't have -D parameter so I need to use DB name here
SET @vchSQL = 'SELECT c.[text] FROM ' + @vchDBName + '.sys.syscomments AS c WHERE c.id = ' + CONVERT(VARCHAR,@intID)
SET @vchSQL = 'bcp "' + @vchSQL + '" queryout "c:\temp\' + @vchName + '.sql" -c -t -T -S ' + @vchServerName
EXEC master..XP_CMDSHELL @vchSQL
SET @intLoop = @intLoop + 1
END
DROP TABLE #tblFound
PRINT 'Done'
Gracias! ¡Justo lo que estaba buscando! –
Idealmente, usted podría generar scripts para ellos como puede para tablas y procedimientos almacenados, etc., pero esto funciona. Gracias;) – Chiramisu