我覺得自己只是一個問題,但我沒有得到谷歌的任何幫助,而且我通過簡單搜索SMO來分析所有SO的結果,但沒有看到它。SQL SMO沒有列舉表格
短版本是我開始玩T4。我正在擴大Oleg Sych's initial tutorial以提供對所有表的枚舉以創建(恕我直言,而非愚蠢的)刪除過程。這只是一個實驗,所以它完全無用並不會打擾我。 :)
我對奧列格的教程擴張看起來是這樣的:
<#@ 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");
}
#>
的問題是,沒有表從Tables
集合返回。這由我生成的表計數SQL註釋驗證,其輸出0
。
作爲寫入,上面的代碼生成以下內容:
USE dbname
/* Number of tables: 0 */
然而,如果刪除for循環和手動提供存在於該數據庫中的有效的表名,它生成的(再次傻)PROC - 那張桌子。
這些表被分成一個模式,這是否重要?此外,這是針對SQL2005實例 - 這可能會導致問題?
最後,我還發現我無法通過Synonyms集合列舉同義詞。 (我認爲我會很聰明,因爲這些表是在一個模式中,但是有同義詞定義,但是沒有骰子)
再次重申,上述代碼自然不是生產,甚至不值得生產。我只是想學習T4和SMO,並試圖做一些我認爲會很簡單的事情。 :)
感謝您的建議!我確信它會起作用,但如果它不行,我會確定並更新(並接受此)! – 2009-03-06 12:09:25