c# - SMO - 未找到 dbo 以外的模式中的表
问题描述
我需要为特定表生成一个创建表脚本。我到目前为止的代码是这样的,该方法将 tbName(表名)作为参数。
string sqlServerLogin = sourceDb.userId;
string password = sourceDb.password;
string serverName = sourceDb.serverName;
string schema = "custom";
ServerConnection serverConnect = new ServerConnection(serverName);
serverConnect.LoginSecure = false;
serverConnect.Login = sqlServerLogin;
serverConnect.Password = password;
serverConnect.Connect();
Server server = new Server(serverConnect);
Database database = new Database(server, "devData");
List<Urn> list = new List<Urn>();
DataTable dataTable = database.EnumObjects(DatabaseObjectTypes.Table);
foreach (DataRow row in dataTable.Rows)
{
list.Add(new Urn((string)row["Urn"]));
}
Scripter scripter = new Scripter();
scripter.Server = server;
scripter.Options.IncludeHeaders = true;
scripter.Options.DriAllKeys = true;
scripter.Options.DriIndexes = true;
scripter.Options.DriAllConstraints = true;
scripter.Options.ClusteredIndexes = true;
scripter.Options.NonClusteredIndexes = true;
Table table = database.Tables[tbName, Schema];
scripter.Script(new Urn[] { table.Urn });
StringCollection sc = scripter.Script(new Urn[] { table.Urn });
foreach(string script in sc)
{
sb.AppendLine();
sb.AppendLine("--create table");
sb.Append(script + ";");
}
Console.WriteLine(sb.ToString());
return sb.ToString();
但是当我运行它时,它会抛出一个错误,说表为空。我最初认为问题出在连接上,但是在将其更改为 dbo 模式中的表之后,它能够很好地生成脚本。
编辑: 在进一步查看之后,我认为问题是因为在 URN 中它将 dbo 指定为架构。所以我想我的下一个问题是如何更改 URN?
我是使用 SMO 的新手,因此不胜感激
解决方案
推荐阅读
- javascript - 远程 URL 模型不适用于无限滚动
- python - 有没有办法解决这个刮擦问题?
- c# - 如何做产品目录?
- xcode - 传递给不带参数的调用的参数.. Firebase
- jquery - 即使我成功返回数据,数据表也没有显示任何数据(我在 backedn 中使用 laravel)
- php - 在单个产品页面中使用额外选项
- flutter - Flutter,Future.wait如何实现众多功能?
- excel - 查找匹配的最后一行并检查下一列是否为空
- node.js - 在 Google Cloud Spanner 中插入或读取(如果记录已存在)的最高效方式
- javascript - 处理模态内容和搜索引擎优化