SQL查询表别名
是否有方法命名/别名SQL查询的数据表 即:SQL查询表别名,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,是否有方法命名/别名SQL查询的数据表 即: SELECT TOP 10 * FROM Table_MOON; SELECT TOP 10 * FROM Table_SUN; 当您将其加载到数据集“ds”中时,即在VB.NET中,它将变为: ds.table(0) ds.table(1) 有没有一种方法可以在SQL查询中别名表,以便调用如下表: ds.table("Table_MOON") ds.table("Table_SUN") 问题是,当表(0)为空时,表(1)变为表(0) 我没能在
SELECT TOP 10 * FROM Table_MOON;
SELECT TOP 10 * FROM Table_SUN;
当您将其加载到数据集“ds”中时,即在VB.NET中,它将变为:
ds.table(0)
ds.table(1)
有没有一种方法可以在SQL查询中别名表,以便调用如下表:
ds.table("Table_MOON")
ds.table("Table_SUN")
问题是,当表(0)为空时,表(1)变为表(0)
我没能在谷歌上搜索到关于这件事的任何信息,因为涉及的关键词太笼统了
编辑:
请注意,我们的想法是将其保存在一个事务中。
此外,通过datarow方法进行迭代(添加具有datatable名称的列)是不可接受的,因为嵌套和可能导致的高处理时间
问候,
Libor正如我直接从SQL查询中了解到的,您不能这样做,但您可以在以下内容中手动命名它们:
ds.table[0].TableName = "Table_MOON";
是的,你可以
SqlConnection connection = new SqlConnection("Data Source=localhost; Initial Catalog=myDatabase; Trusted_Connection=true;User Id=;Password=");
connection.Open();
string sqlUsers = @"select * from Users";
string sqlRoles = @"select * from Roles";
SqlDataAdapter daUsers = new SqlDataAdapter(sqlUsers, connection);
SqlDataAdapter daRoles = new SqlDataAdapter(sqlRoles, connection);
DataSet dsUsersAndRoles = new DataSet("UserAndRoles");
daUsers.Fill(dsUsersAndRoles, "users");
daRoles.Fill(dsUsersAndRoles, "roles");
var userTable = dsUsersAndRoles.Tables["users"];
填充数据集时,可以指定名称
注意:这段代码是c#,但我想它应该很容易转换
这是最好的,以防万一
更新:
您可以使用SqlDataAdapter
的TableMappings
集合来映射查询表达式中的每个表:
SqlConnection connection = new SqlConnection("Data Source=localhost; Initial Catalog=myDatabase; Trusted_Connection=true;User Id=;Password=");
connection.Open();
string sqlUsersRoles = @"select * from UserLogins;select * from Users;select * from Roles";
SqlDataAdapter daUsersRoles = new SqlDataAdapter(sqlUsersRoles, connection);
daUsersRoles.TableMappings.Add("Table", "UserLogins");
daUsersRoles.TableMappings.Add("Table1", "Users");
daUsersRoles.TableMappings.Add("Table2", "Roles");
DataSet dsUsersAndRoles = new DataSet("UserAndRoles");
daUsersRoles.Fill(dsUsersAndRoles);
DataTableCollection tables = dsUsersAndRoles.Tables;
DataTable users = tables["Users"];
如您所见,我的Sql语句包含3个表上的3个查询。
表名为Table
,Table1
,Table2
等等
通过向集合中添加元素,可以重命名它们:
daUsersRoles.TableMappings.Add("Table", "UserLogins");
daUsersRoles.TableMappings.Add("Table1", "Users");
daUsersRoles.TableMappings.Add("Table2", "Roles");
很抱歉,我没有指定一件我认为很自然的事情:我希望在一个事务中使用表(这是一种正确的方法)。我在您的示例中看到两个单独的事务。。。我在一个进程中有多达15个数据表,每个数据表都有许多联接,我想这已经是非常糟糕的设计了。@user326058:你可以找到我答案的更新。我明白你的意思,我会试试看。这似乎是一个正确的答案,我一试就做了标记。我特别感兴趣的是,如果第一张或第二张桌子什么都不是,会发生什么。。。“角色”应该留在表2,而不是跳进表1。我不太明白为什么你的表应该什么都没有。给我们一些反馈。好的,一个简单的例子是一个项目,它可能包含几种类型的子项目。每种类型的子项都列在单独的表中,可能有0行(无子项)。但是仔细看一下你的代码,它应该是有效的。出现的另一个问题是,我在一个单独的数据访问层中有这个函数,它对所有查询都是通用的,我必须仔细考虑,是否可以使它在任意数量的表中正常工作。:-。但是你需要知道表(0)是“表月亮”,你不知道。我写了一个例子来解释,我需要它来识别表,这样(1)就不会跳转到(0),在这种情况下,第一个数据表中有错误的数据,而第二个数据表中没有数据。这就是为什么这不是一个VB.NET问题,但很可能只是SQL问题,因为我想知道是否可以为查询表添加别名。无论如何,谢谢你。