尝试使用ROW_NUMBER()时出现错误,为什么?

时间:2020-05-13 09:33:43

标签: sql sql-server tsql window-functions

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

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)
);

1 个答案:

答案 0 :(得分:2)

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}')