Se avete bisogno di ottenere script da T-SQL allora solo utilizzando xp_cmdshell. Ad esempio scripting indice concreate di vista concreate con SMO e PowerShell (risultato è variabile @Script, è possibile eseguire con sp_executesql):
DECLARE @OUTPUT TABLE (line nvarchar(max))
DECLARE @cmd VARCHAR(8000), @ps VARCHAR(8000), @psLoadAssemblies VARCHAR(8000), @script nvarchar(max) =''
DECLARE @srv nvarchar(max)='<server name>',
@ln nvarchar(max)='<login>',
@pw nvarchar(max)='<password>',
@db nvarchar(max) = '<database>',
@schemaName nvarchar(max) = '<schema>', -- without '[' ']'
@viewName nvarchar(max) = '<view name>', -- without '[' ']'
@indexName nvarchar(max) = '<index name>' -- without '[' ']'
SET @psLoadAssemblies = '[System.Reflection.Assembly]::LoadWithPartialName(''Microsoft.SqlServer.SMO'')|Out-Null;'
SET @ps='$using=''Microsoft.SqlServer.Management.Smo'';$s=new-object($using+''.Server'') $srv;$c = $s.ConnectionContext;$c.LoginSecure=$false;$c.Login=$ln;$c.Password=$pw; Write-Host ($s.Databases[$db].Views.Item($viewName,$schemaName).Indexes[$indexName].Script())'
SET @ps=REPLACE(@ps,'$srv',''''[email protected]+'''')
SET @ps=REPLACE(@ps,'$ln',''''[email protected]+'''')
SET @ps=REPLACE(@ps,'$pw',''''[email protected]+'''')
SET @ps=REPLACE(@ps,'$db',''''[email protected]+'''')
SET @ps=REPLACE(@ps,'$schemaName',''''[email protected]+'''')
SET @ps=REPLACE(@ps,'$viewName',''''[email protected]+'''')
SET @ps=REPLACE(@ps,'$indexName',''''[email protected]+'''')
SET @cmd = 'powershell -Command "'[email protected][email protected]+'"'
exec dev.Msg @cmd
INSERT INTO @OUTPUT
exec xp_cmdshell @cmd
SELECT @script+line FROM @OUTPUT
WHERE line is not null
PRINT @script
P.S. Per chi chiede perché potremmo aver bisogno di trucchi del genere: in alcuni scenari, ad es. "importa i dati usando lo strumento di terze parti", l'approccio "drop-recreate" funziona meglio degli oggetti "enable-disable", ad es. perché tale strumento di terze parti può chiamare "truncate" e se la tua tabella partecipa alla vista vincolata allo schema si otterrà un errore di strumento di terze parti (la tabella troncante che partecipa alle viste indicizzate genera un errore, quindi siamo costretti ad abbandonare la vista con tutti gli indici prima di importare e ricrearlo dopo).
fonte
2014-01-29 14:19:52
Mi piacerebbe farlo da una sceneggiatura. In Mysql vorrei fare "show create table exampletablename" per ogni tabella. – tomsv