Asp.net 在sqldatasource中的JOIN命令中提供别名

Asp.net 在sqldatasource中的JOIN命令中提供别名,asp.net,sql-server,join,alias,sqldatasource,Asp.net,Sql Server,Join,Alias,Sqldatasource,我正在使用JOIN命令连接SqlDataSource中的两个表 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:CS %>" SelectCommand="SELECT UserName as UN, AboutMe, WebPage, Email FROM Users JOIN ProfileImag

我正在使用JOIN命令连接SqlDataSource中的两个表

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:CS %>" 
        SelectCommand="SELECT UserName as UN, AboutMe, WebPage, Email FROM Users JOIN ProfileImages ON ProfileImages.UserName = Users.UN WHERE (UN = @UserName)" >
</asp:SqlDataSource>
在MS SQL Server Management Studio中,此命令正常。但在SqlDataSource中,它返回错误-列名“UN”无效,列名“UserName”不明确


如何在SqlDataSource中正确地别名此命令以不返回这些错误?

我不是SQL方面的专家,但是如果ProfileImages和Users都包含“UserName”列,那么在select列中,您需要指定从中提取用户名的表。比如:

SELECT Users.UserName as UN, Users.AboutMe, Users.WebPage, Users.Email 
FROM Users
JOIN ProfileImages ON ProfileImages.UserName = Users.UserName 
WHERE (Users.UserName = @UserName)

我不是SQL方面的专家,但是如果ProfileImages和Users都包含“UserName”列,那么在select列中,您需要指定从中提取用户名的表。比如:

SELECT Users.UserName as UN, Users.AboutMe, Users.WebPage, Users.Email 
FROM Users
JOIN ProfileImages ON ProfileImages.UserName = Users.UserName 
WHERE (Users.UserName = @UserName)

不能在where子句中使用列别名

    SELECT UserName as UN, AboutMe, WebPage, Email 
    FROM Users usersAlias JOIN ProfileImages piAlias ON piAlias.UserName = usersAlias.UserName 
WHERE (usersAlias.UserName = @UserName)
当您查看执行顺序时,这是有意义的:

由于执行顺序为: 这些阶段及其顺序如下所示:

从…起 在…上 外面的 哪里 分组 立方体|上卷 有 选择 不同的 10订购人 顶部
当从1、2和where 4处理这些数据时,他们不知道select 8 aka(UN的别名),select子句中的列别名不能用于where和from及on子句。

您不能在where子句中使用列别名

    SELECT UserName as UN, AboutMe, WebPage, Email 
    FROM Users usersAlias JOIN ProfileImages piAlias ON piAlias.UserName = usersAlias.UserName 
WHERE (usersAlias.UserName = @UserName)
当您查看执行顺序时,这是有意义的:

由于执行顺序为: 这些阶段及其顺序如下所示:

从…起 在…上 外面的 哪里 分组 立方体|上卷 有 选择 不同的 10订购人 顶部 在处理from 1和on 2以及where 4时,他们不知道select 8 aka(UN的别名),select子句中的列别名不能用于where和from及on子句。

您的查询有点错误 你用错了别名i

第一: 您可以在以下部分中使用alias:

领域。用户名为UN的示例 表名称:UserTable as US 在order by部分示例中:order by UN Desc 这是因为sql按以下顺序运行查询操作:

FROM子句 WHERE子句 分组依据子句 有从句 SELECT子句 按条款订货 因此,由于FROM子句首先运行,sql不知道SELECT子句中的别名

查看一个正确的查询

SELECT 
    UserName as UN,
    AboutMe,
    WebPage,
    Email 
FROM Users 
JOIN ProfileImages ON ProfileImages.UserName = Users.UserName 
WHERE (Users.UserName = @UserName)
你的问题有点错误 你用错了别名i

第一: 您可以在以下部分中使用alias:

领域。用户名为UN的示例 表名称:UserTable as US 在order by部分示例中:order by UN Desc 这是因为sql按以下顺序运行查询操作:

FROM子句 WHERE子句 分组依据子句 有从句 SELECT子句 按条款订货 因此,由于FROM子句首先运行,sql不知道SELECT子句中的别名

查看一个正确的查询

SELECT 
    UserName as UN,
    AboutMe,
    WebPage,
    Email 
FROM Users 
JOIN ProfileImages ON ProfileImages.UserName = Users.UserName 
WHERE (Users.UserName = @UserName)

在ProfileImages.UserName=Users.UserName上。。。您不能像尝试过的那样在联接条件中使用别名。这在Management studio上是不正确的,您不能在联接条件中使用列别名,也不能在可以按顺序使用列别名的位置中使用列别名,尽管在Management研究中选择用户名为UN是正确的,抱歉。我修复了ProfileImages.UserName=Users.UserName,但它仍然返回错误不明确的列名“UserName”。您不能在联接或where子句中使用别名,只能按顺序排列,如果您不确定,就不要在逻辑中使用它们,仅用于列名。在ProfileImages.UserName=Users.UserName。。。您不能像尝试过的那样在联接条件中使用别名。这在Management studio上是不正确的,您不能在联接条件中使用列别名,也不能在可以按顺序使用列别名的位置中使用列别名,尽管在Management研究中选择用户名为UN是正确的,抱歉。我将其修改为ProfileImages.UserName=Users.UserName,但它仍然返回错误不明确的列名“UserName”。您不能在联接或where子句中使用别名,只能使用order by,如果您不确定,就不要在逻辑中仅对列名使用它们。这样,您就摆脱了不明确的列名“UserName”,但是您仍然在连接条件中使用列别名,在WHERE中,您消除了不明确的列名“UserName”,但在连接条件和WHERE中仍然使用列别名