【问题标题】:SMO fails to execute script with user-defined table typeSMO 无法使用用户定义的表类型执行脚本
【发布时间】:2013-10-25 19:13:18
【问题描述】:

我正在尝试执行从文件中读取的 sql 脚本;但是,当我去执行脚本时,我遇到了异常:

Column, parameter, or variable #1: Cannot find data type dbo.ExistingTableType.
Must declare the table variable "@existingTableType".
Parameter or variable '@existingTableType' has an invalid data type.

我尝试通过复制文本并在 SQL Server Management Studio 中运行它来测试脚本,它确实运行成功。此外,其他脚本能够运行,但由于某些原因,那些以用户定义的表类型作为参数的脚本不能运行。下面是一个简单的例子:

C#

string script = scriptFile.OpenText().ReadToEnd();
SqlConnection connection = new SqlConnection(connectionString);
Server server = new Server(new ServerConnection(connection));
server.ConnectionContext.StatementTimeout = 100;
server.ConnectionContext.ExecuteNonQuery(script);

SQL

CREATE PROCEDURE [dbo].[failedStoredProcedure]
(
    @existingTableType dbo.ExistingTableType READONLY
)
AS

-- Do something here

GO

完成的其他测试:

  • 在连接字符串中尝试了另一个用户。

编辑:此外,当脚本运行时,如果对象确实存在,它会返回“无效的对象名称 {x}”。

【问题讨论】:

  • 您的连接字符串是否包含默认目录?您确定您的 C# 代码在正确的数据库中运行脚本吗?
  • 已替换信息的连接字符串示例:“server=SERVER\INSTANCE;database=database_name;Integrated Security=SSPI;Persist Security Info=False;”此外,它在正确的数据库上运行。

标签: c# sql sql-server smo user-defined-types


【解决方案1】:

我最终尝试了您的代码(SQL 2012 Express),它运行良好。 sql 账号是否对该类型有授权?

【讨论】:

  • 当我登录到 SSMS 时,我以同一用户身份登录并测试脚本,在这种情况下它可以工作。
  • 请检查 server.ConnectionContext.DatabaseName 并验证它是否指向正确的数据库,还要检查 server.ConnectionContext.TrueLogin 并验证它是否指向正确的用户名。
  • 我检查了服务器连接。 DatabaseName、Login、ConnectionString、TrueLogin、LoginSecure 都是正确的。不过还是不行。
【解决方案2】:

似乎在某些时候 SMO 对象发生了某些事情,它不再适用于指定的数据库,尽管数据库名称是预期的对象。

为了纠正这个问题,我创建了一个新的数据库对象并从那里应用了脚本:

Server server = new Server();
server.ConnectionContext.ConnectionString = connectionString;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
Database db = server.Databases[builder.InitialCatalog];

然后稍后运行

db.ExecuteNonQuery(script);

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2014-06-06
    相关资源
    最近更新 更多