Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询表别名_Sql_Sql Server_Vb.net - Fatal编程技术网

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) 我没能在

是否有方法命名/别名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)

我没能在谷歌上搜索到关于这件事的任何信息,因为涉及的关键词太笼统了

编辑: 请注意,我们的想法是将其保存在一个事务中。 此外,通过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问题,因为我想知道是否可以为查询表添加别名。无论如何,谢谢你。