Wenn Sie Skript von T-SQL bekommen müssen dann nur xp_cmdshell verwenden. Zum Beispiel concreate Index concreate Ansicht mit SMO und Powershell-Scripting (Ergebnis in @script Variable ist, können Sie es mit Sp_executesql ausführen kann):
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. Für diejenigen, die fragt, warum wir solche Tricks brauchen könnten: in einigen Szenarien, z.B. "Importieren von Daten unter Verwendung eines Tools von Drittanbietern", funktioniert der Ansatz "Drop-Re-Create" besser als "Enable-Disable" -Objekte, z. weil solch ein Tool von Drittanbietern "truncate" aufrufen kann und wenn Ihre Tabelle an der schemagebundenen Ansicht teilnimmt, erhalten Sie einen Toolfehler eines Drittanbieters (die an indizierten Sichten teilnehmende Tabelle verursacht einen Fehler, weshalb wir gezwungen sind, die Ansicht mit allen Indizes zu löschen) vor dem Import und neu erstellen es nach).
Ich möchte dies von einem Skript aus tun. In Mysql würde ich "show create table exampletablename" für jede Tabelle machen. – tomsv