C#-使用SQLCommand创建SQL用户定义的表类型失败

C#-使用SQLCommand创建SQL用户定义的表类型失败,c#,sql-server,C#,Sql Server,我正在尝试为我的单元测试脚本创建一个动态数据库 使用SQL Server LocalDB 11.00.3000 .NET4.0 我可以创建/删除数据库并添加SP、视图、表等。。。使用直接的SQL脚本就可以了 当我尝试创建一个用户定义的类型时,问题就出现了 CREATE TYPE test as TABLE( [Action_Item_Id] INT,[Shift_Id] NVARCHAR (34)) 。。。。在SQL控制台中完美执行。但是在代码中 SqlConnection conn = ne

我正在尝试为我的单元测试脚本创建一个动态数据库

使用SQL Server LocalDB 11.00.3000 .NET4.0

我可以创建/删除数据库并添加SP、视图、表等。。。使用直接的SQL脚本就可以了

当我尝试创建一个用户定义的类型时,问题就出现了

CREATE TYPE test as TABLE( [Action_Item_Id] INT,[Shift_Id] NVARCHAR (34))
。。。。在SQL控制台中完美执行。但是在代码中

SqlConnection conn = new SqlConnection(connString);
conn.Open();
var cmd = new SqlCommand("CREATE DATABASE UnitTestingDatabase",conn);
conn.ChangeDatabase("master");
cmd.ExecuteNonQuery();
conn.ChangeDatabase("UnitTestingDatabase");
cmd.CommandText = "CREATE TYPE test as TABLE( [Action_Item_Id] INT,[Shift_Id] NVARCHAR (34))";
cmd.ExecuteNonQuery();
我得到一个例外:

{"Incorrect syntax near ''."}
[System.Data.SqlClient.SqlException]: {"Incorrect syntax near ''."}
_className: null
_data: {System.Collections.ListDictionaryInternal}
_dynamicMethods: null
_exceptionMethod: {Void OnError(System.Data.SqlClient.SqlException, Boolean, System.Action`1[System.Action])}
_exceptionMethodString: null
_helpURL: null
_HResult: -2146232060
_innerException: null
_ipForWatsonBuckets: 247330783
_message: "Incorrect syntax near ''."
_remoteStackIndex: 0
_remoteStackTraceString: null
_safeSerializationManager: {System.Runtime.Serialization.SafeSerializationManager}
_source: null
_stackTrace: {sbyte[384]}
_stackTraceString: null
_watsonBuckets: null
_xcode: -532462766
_xptrs: 0
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
HResult: -2146232060
InnerException: null
IPForWatsonBuckets: 247330783
IsTransient: false
Message: "Incorrect syntax near ''."
RemoteStackTrace: null
Source: ".Net SqlClient Data Provider"
TargetSite: {Void OnError(System.Data.SqlClient.SqlException, Boolean, System.Action`1[System.Action])}
WatsonBuckets: null

我花了一点时间才意识到这不是一场比赛。它与“”之间的虚无有问题,这似乎是胡说八道。

Hmm,我以前从未尝试过这样做,但是,在SQL中使用游标对象可能比创建类型更好。此外,创建动态数据库可能会导致许多问题。最好使用存储过程和您定义的变量,这些变量返回一个游标(类似于临时表),然后读取/解析游标。@Ryan Carlisle-我们正在进行单元测试的主代码使用一个数据表,该数据表被传递到SP中,以便大批量处理它。所以光标可能并不理想。由于动态数据库仅用于在localdb上进行单元测试,因此我并不过分担心这一点。我可能最终不得不创建数据库的副本,但这意味着其他人也必须在本地数据库上设置它。(或者把它放在服务器上……也许)我无法重现你的错误。我试过使用.NET4.5。并尝试使用SQL Server 2008 R2和SQL Server 2014。完全使用您的代码,一切工作都很完美。11.00.3000-也许这就是问题所在,也许不受支持。好线索。将使用此信息更新我的问题。的可能副本