使用 SMO 编写 PARTIAL 数据内容的脚本(仅匹配 WHERE 子句的行)
Using SMO to script PARTIAL data content (only rows matching a WHERE clause)
我使用 SMO 用 SQL 服务器数据库的数据填充 SQL 压缩数据库。
这是我实际使用的代码:
foreach(Table l_tblCurrent in l_dbDatabase.Tables)
{
if(l_tblCurrent.IsSystemObject) continue;
ScriptingOptions l_scOptions = new ScriptingOptions();
l_scOptions.NoIdentities = true;
l_scOptions.NoCollation = true;
l_scOptions.NoCommandTerminator = true;
l_scOptions.NoFileGroup = true;
l_scOptions.ScriptSchema = true;
l_scOptions.ScriptData = true;
foreach(string l_strCurrent in l_tblCurrent.EnumScript(l_scOptions))
{
l_sccDBFCommand.CommandText = l_strCurrent.Replace("[dbo].", "");
l_sccDBFCommand.ExecuteNonQuery();
}
}
它工作得很好,但是对于几个表,我不想复制所有的行。我希望能够 select 只复制与 WHERE 子句匹配的行。
可能吗?
SMO 似乎不支持 WHERE 子句或任何其他限制记录数的机制。我建议的解决方法是创建一个包含记录子集的新 table,编写脚本,然后删除它。一切都可以通过编程方式完成。
我使用 SMO 用 SQL 服务器数据库的数据填充 SQL 压缩数据库。
这是我实际使用的代码:
foreach(Table l_tblCurrent in l_dbDatabase.Tables)
{
if(l_tblCurrent.IsSystemObject) continue;
ScriptingOptions l_scOptions = new ScriptingOptions();
l_scOptions.NoIdentities = true;
l_scOptions.NoCollation = true;
l_scOptions.NoCommandTerminator = true;
l_scOptions.NoFileGroup = true;
l_scOptions.ScriptSchema = true;
l_scOptions.ScriptData = true;
foreach(string l_strCurrent in l_tblCurrent.EnumScript(l_scOptions))
{
l_sccDBFCommand.CommandText = l_strCurrent.Replace("[dbo].", "");
l_sccDBFCommand.ExecuteNonQuery();
}
}
它工作得很好,但是对于几个表,我不想复制所有的行。我希望能够 select 只复制与 WHERE 子句匹配的行。
可能吗?
SMO 似乎不支持 WHERE 子句或任何其他限制记录数的机制。我建议的解决方法是创建一个包含记录子集的新 table,编写脚本,然后删除它。一切都可以通过编程方式完成。