Ich fühle mich wie ein Depp nur um das zu fragen, aber ich bekomme keine Hilfe von Google, und ich blätterte alle Ergebnisse von SO auf einer einfachen Suche nach SMO und sah es auch nicht .SQL SMO Tabellen nicht aufzählen
Die kurze Version ist, dass ich anfange, mit T4 zu spielen. Ich expandiere auf Oleg Sych's initial tutorial, um Aufzählung über alle Tabellen bereitzustellen, um einen (IMHO eher albernen) Löschvorgang zu erstellen. Das ist nur ein Experiment, also stört mich seine völlige Nutzlosigkeit nicht. :)
Meine Expansion Oleg Tutorial wie folgt aussieht:
<#@ template language="C#" hostspecific="true" #>
<#@ output extension="SQL" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#@ include file="T4Toolbox.tt" #>
<#
// Config variables
string serverName = "dbserver\\dbinstance";
string dbName = "dbname";
#>
USE <#= dbName #>
<#
// Iterate over tables and generate procs
Server server = new Server(serverName);
Database database = new Database(server, dbName);
WriteLine("/* Number of tables: " + database.Tables.Count.ToString() + " */");
foreach (Table table in database.Tables)
{
table.Refresh();
#>
CREATE PROCEDURE <#= table.Name #>_Delete
<#
PushIndent(" ");
foreach (Column column in table.Columns)
{
if (column.InPrimaryKey)
WriteLine("@" + column.Name + " " + column.DataType.Name);
}
PopIndent();
#>
AS
DELETE FROM
<#= table.Name #>
WHERE
<#
PushIndent(" ");
foreach (Column column in table.Columns)
{
if (column.InPrimaryKey)
WriteLine(column.Name + " = @" + column.Name);
}
PopIndent();
WriteLine("GO");
}
#>
Das Problem ist, dass keine Tabellen aus der Tables
Sammlung zurückgegeben werden. Dies wird durch den von mir erzeugten Tabellenzählungs-SQL-Kommentar bestätigt, der 0
ausgibt.
Wie geschrieben, oberhalb der Code generiert die folgende:
USE dbname
/* Number of tables: 0 */
Wenn ich jedoch die for-Schleife entfernen und manuell einen gültigen Tabellennamen angeben, die in dieser Datenbank vorhanden ist, erzeugt es das (wieder dumme) proc - Für diesen Tisch.
Die Tabellen sind in ein Schema unterteilt, wäre das wichtig? Außerdem läuft dies gegen eine SQL2005-Instanz - würde das möglicherweise Probleme verursachen?
Schließlich finde ich auch, dass ich Synonyme über die Synonymsammlung nicht aufzählen kann. (Ich dachte, ich wäre schlau und gehe diesen Weg, da die Tabellen in einem Schema sind, aber Synonyme definiert haben. Aber ... keine Würfel.)
Noch einmal, um zu wiederholen, der obige Code ist natürlich keine Produktion, noch nicht einmal die Produktion wert. Ich versuche nur, sowohl T4 als auch SMO zu lernen und einen Roadblock zu treffen, der versucht, etwas zu tun, von dem ich dachte, dass es lächerlich einfach wäre. :)
Danke für den Hinweis! Ich bin sicher, es wird funktionieren, aber ich bin mir sicher und update (und akzeptiere das), wenn es nicht ist! –
Sie rocken. Absolut wie ein Charme gearbeitet. Danke noch einmal! –