我想将一个表参数传递给SQL Server 2008.我在Internet上找到的大部分内容都是关于使用存储过程执行此操作,但是是否可以使用Ad-Hoc查询执行此操作?使用下面的代码,我得到错误,“列,参数或变量@idList。:找不到数据类型dbo.SiteType。”。我认为它可能正在执行类型定义作为一个完全独立的查询,并在启动SELECT时“忘记”它。
DataTable dt = new DataTable();
dt.Columns.Add("ID", Type.GetType("System.Guid"));
foreach (Guid guid in filter.FetchIDs)
{
DataRow row = dt.NewRow();
row["ID"] = guid;
}
sqlCmd.CommandText = "CREATE TYPE [dbo].[SiteType] AS TABLE(ID uniqueidentifier);" + "SELECT * FROM Site INNER JOIN @idList as FetchIDs on FetchIDs.ID=Site.ID;";
SqlParameter parameter = sqlCmd.Parameters.AddWithValue("@idList", dt);
parameter.TypeName = "[dbo].[SiteType]";
更新:我将'dbo.SiteType'作为类型添加到数据库中,现在使用此代码它可以工作,但返回零行:
DataTable dt = new DataTable();
dt.Columns.Add("ID", Type.GetType("System.Guid"));
foreach (Guid guid in filter.FetchIDs)
{
DataRow row = dt.NewRow();
row["ID"] = guid;
}
sqlCmd.CommandText = "SELECT * FROM Site INNER JOIN @idList as FetchIDs on FetchIDs.ID=Site.ID;";
SqlParameter parameter = sqlCmd.Parameters.Add("@idList", SqlDbType.Structured);
parameter.TypeName = "[dbo].[SiteType]";
parameter.Value = dt;
答案 0 :(得分:0)
最后,在这里工作代码(在服务器中创建表数据类型之后):
DataTable dt = new DataTable();
dt.Columns.Add("ID", Type.GetType("System.Guid"));
foreach (Guid guid in filter.FetchIDs)
{
DataRow row = dt.NewRow();
row["ID"] = guid;
dt.Rows.Add(row);
}
sqlCmd.CommandText = "SELECT * FROM Site INNER JOIN @idList as FetchIDs on FetchIDs.ID=Site.ID;";
SqlParameter parameter = sqlCmd.Parameters.Add("@idList", SqlDbType.Structured);
parameter.TypeName = "[dbo].[SiteType]";
parameter.Value = dt;