UPDATE Purch_Pay SET SN = Table1.row_number
FROM (SELECT TOP 100 PERCENT row_number()over (ORDER BY PayDate) row_number,PayDate,VendorID,PurchID,PayMoney,Note_number FROM Purch_Pay ORDER BY PayDate) Table1
WHERE Table1.VendorID = Purch_Pay.VendorID AND Table1.PayDate = Purch_Pay.PayDate AND Table1.PurchID = Purch_Pay.PurchID AND Table1.PayMoney = Purch_Pay.PayMoney AND Table1.Note_number = Purch_Pay.Note_number;
加点缩进啊,都写一起了
WITH CTE AS (
SELECT
row_number() OVER (ORDER BY PayDate) AS row_number,
PayDate,
VendorID,
PurchID,
PayMoney,
Note_number
FROM Purch_Pay
)
UPDATE p
SET p.SN = c.row_number
FROM Purch_Pay p
JOIN CTE c ON c.VendorID = p.VendorID
AND c.PayDate = p.PayDate
AND c.PurchID = p.PurchID
AND c.PayMoney = p.PayMoney
AND c.Note_number = p.Note_number;
啥问题 ??
不知道你这个问题是否已经解决, 如果还没有解决的话:对不同的用户授予属性列级的SELECT, INSERT, UPDATE的权限:输出用户权限如下:
收回之前授予的权限:
收回之后的用户权限输出如下:
通过命令行指令,使用定义的用户进入数据库进行操作,下图为使用u2进入数据库之后对回答ID为2的回答的文本进行修改,因为没有select权限所以无法输出:
在SQL中,我们可以使用子查询来在UPDATE语句中使用SELECT查询的结果来更新表中的数据。以下是具体的解决方法:
SELECT column1, column2, ... FROM table_name WHERE condition;
请将column1, column2, ...
替换为要更新的列的名称,table_name
替换为表的名称,condition
替换为筛选条件。
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
请将table_name
替换为表的名称,column1 = value1, column2 = value2, ...
替换为要更新的列及其对应的新值,condition
替换为筛选条件。
UPDATE table_name
SET column1 = (
SELECT column1 FROM table2_name WHERE condition
),
column2 = (
SELECT column2 FROM table2_name WHERE condition
),
...
WHERE condition;
请将table_name
替换为表的名称,column1, column2, ...
替换为要更新的列的名称,table2_name
替换为包含我们想要引用的数据的表的名称,condition
替换为筛选条件。
请注意,为了确保子查询返回的结果与UPDATE语句联合使用时的数据一致,我们可以在子查询的末尾添加FOR UPDATE子句,这将为子查询的结果设置排它锁,以确保其他事务无法修改这些数据。例如:
SELECT column1, column2, ... FROM table_name WHERE condition FOR UPDATE;
以上是使用SELECT语句来更新表中数据的方法。希望对您有所帮助!如果还有其他问题,请随时提问。