首页 > 解决方案 > 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 的新手,因此不胜感激

标签: c#sql-serversmo

解决方案


推荐阅读