当我尝试使用 ROW_NUMBER() 时出现错误,为啥?

Posted

技术标签:

【中文标题】当我尝试使用 ROW_NUMBER() 时出现错误,为啥?【英文标题】:I get an error when I try to use ROW_NUMBER(), why?当我尝试使用 ROW_NUMBER() 时出现错误,为什么? 【发布时间】:2020-05-13 09:33:43 【问题描述】:

我正在尝试写这样的东西:

string AT2 = string.Format("UPDATE User_Info SET Admin = 1 WHERE (Row_Number = N'1'+N'0')", x, 1);

上面还有这个:

string cmdStr = "SELECT Firstname, Lastname, Username, Password, Email, Phone, Admin, id, ROW_NUMBER() as 'Row_Number' FROM User_Info";

我收到此错误:

函数“ROW_NUMBER”必须有一个 OVER 子句。

有人知道为什么吗?所以我需要在我的表中添加一些东西..?还是换个方式写?

我的桌子:

CREATE TABLE [dbo].[User_Info] 
(
    [Username]  NVARCHAR (50) NOT NULL,
    [Password]  NVARCHAR (50) NOT NULL,
    [Firstname] NVARCHAR (50) NOT NULL,
    [Lastname]  NVARCHAR (50) NOT NULL,
    [Email]     NVARCHAR (50) NOT NULL,
    [Country]   NVARCHAR (50) NOT NULL,
    [Phone]     NVARCHAR (50) NOT NULL,
    [Gender]    NVARCHAR (50) NOT NULL,
    [Admin]     INT           NULL,
    [id]        INT IDENTITY (1, 1) NOT NULL,

    PRIMARY KEY CLUSTERED ([Username] ASC)
);

【问题讨论】:

您的数据库什么?你认为row_number 是什么? 我认为它像.Rows[x] 样本数据、期望的结果和对逻辑的解释会有所帮助。显然,您的代码没有名为row_number 的列。但除此之外,还不清楚您要做什么。 我的网站上有一个管理页面。我希望更新按钮将对每个检查的用户运行查询并将其 Admin 值更改为 1 【参考方案1】:
string cmdStr = "SELECT Firstname, Lastname, Username, Password, Email, Phone, Admin, id, ROW_NUMBER() OVER (ORDER BY Firstname) FROM User_Info";

您缺少ROW_NUMBER() OVER (ORDER BY Firstname) OVER() 子句。

如果您想按 id 进行排序,请将其用作 ROW_NUMBER() OVER (ORDER BY Id),这样行将随着 Id 升序而增加,对于您希望作为 ROW_NUMBER 子句基础的任何行,行都会增加。

所以更新语句可能是这样的。

UPDATE User_Info SET Admin = 1 WHERE id=

(SELECT ID FROM (
(SELECT Firstname, Lastname, Username, Password, Email, Phone, Admin, id, ROW_NUMBER() OVER (ORDER BY Firstname) ROWNUMBER FROM User_Info)) b WHERE b.ROWNUMBER=N'1'+N'0')

【讨论】:

so.. 我更新了 cmdStr,我更新了 AT2,所以它的 string AT2 = string.Format("UPDATE User_Info SET Admin = 1 WHERE (ROW_NUMBER() = N'1'+N'0')", x, 1); 我仍然得到同样的错误 在sqlserver中搜索窗口函数 我现在明白了一点,但这并没有帮助 - 因为我好像有一个子句 (order by),它仍然告诉我必须添加一个子句 更新时您现在需要使用数据库列,例如“ID”,您不使用 ROW_NUMBER 列。我希望我能把你弄好 所以我不能使用像Username 这样的列?哦,如果我使用id - 它必须是主键吗?

以上是关于当我尝试使用 ROW_NUMBER() 时出现错误,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试使用 symfony 创建实体时出现 Aborted 错误消息 [重复]

Flask:当我尝试访问索引时出现错误 404

当我尝试安装 @nuxtjs/firebase 时出现 NPM 错误

当我尝试运行使用 CodeIgniter 编写的项目时出现 Xampp 未知错误

当我尝试在 emacs 中安装自动完成时出现错误

当我尝试生成脚手架时出现 Rails 错误