我正在尝试执行从文件中读取的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管理工作室中运行来测试脚本,并且它确实成功运行。此外,其他脚本可以运行,但由于某些原因,那些使用用户定义的表类型作为参数的脚本不能运行。以下是一个简单的例子:
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}”。
答案 0 :(得分:0)
我尝试了你的代码(SQL 2012 Express),它运行得很好。 sql帐户是否有类型的授权?
答案 1 :(得分:0)
似乎在某些时候SMO对象发生了某些事情,它不再适用于指定的数据库,尽管数据库名称是预期的对象。
为了纠正这个问题,我创建了一个新的数据库对象并从那里应用了脚本:
Server server = new Server();
server.ConnectionContext.ConnectionString = connectionString;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
Database db = server.Databases[builder.InitialCatalog];
然后转而运行
db.ExecuteNonQuery(script);