Vous pouvez utiliser l'utilitaire osql ou mieux encore, de la plus récente sqlcmd presque de façon interchangeable. Je suis l'aide de osql dans cet exemple, seul, car il m'est arrivé d'avoir un exemple de code assis autour de lui, mais dans la production, je suis à l'aide de l'utilitaire sqlcmd. Voici une aide de l'extrait de code à partir d'un grand procédure que j'utilise pour exécuter des scripts de mise à jour sur les bases de données. Ils sont commandés par des majeurs, mineurs, de libération, de construire comme j'ai le nom de mon scripts à l'aide de cette convention afin de suivre les rejets. Vous êtes évidemment manquer tous de mon erreur de transmission, les parties où je tire scripts disponibles à partir de la base de données, configuration des variables, etc ... mais vous pouvez toujours trouver ce morceau de code utile.
La partie principale que j'aime à propos de l'utilisation d'osql ou sqlcmd est que vous pouvez exécuter ce code dans ssms, ou dans une procédure stockée (appelée sur une base régulière peut-être) ou à partir d'un fichier de commandes. Très 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