我棘手的SQL更新查询工作得不太好
我试图用另一个表中的另一行更新数据库中的一个表。我有两个参数,一个是ID,另一个是行号(您可以从GUI中选择所需的行) 这部分代码工作正常,返回单行中的一列我棘手的SQL更新查询工作得不太好,sql,sql-server,database,Sql,Sql Server,Database,我试图用另一个表中的另一行更新数据库中的一个表。我有两个参数,一个是ID,另一个是行号(您可以从GUI中选择所需的行) 这部分代码工作正常,返回单行中的一列 (SELECT txtPageContent FROM (select *, Row_Number() OVER (ORDER BY ArchiveDate asc) as rowid from ARC_Content Where ContentID = @ContentID) as test Where rowi
(SELECT txtPageContent
FROM (select *, Row_Number() OVER (ORDER BY ArchiveDate asc) as rowid
from ARC_Content Where ContentID = @ContentID) as test
Where rowid = @rowID)
只是当我尝试添加更新/设置时,它不会工作。我可能错过了什么
UPDATE TBL_Content
Set TBL_Content.txtPageContent = (select txtPageContent
FROM (select *, Row_Number() OVER (ORDER BY ArchiveDate asc) as rowid
from ARC_Content Where ContentID = @ContentID) as test
Where rowid = @rowID)
谢谢你的帮助!(我尝试了top 1,但没有结果)我发现您的更新有一些问题。首先,我没有看到您正在更新的表的任何连接或选择标准。这意味着表中的每一行都将用这个新值更新。这真的是你想要的吗 其次,GUI上的行数与数据库中返回的行数可能不匹配。即使您在GUI中重新生成用于创建列表的查询(无论如何,这是危险的,因为它涉及保持更新和选择代码始终同步),也可能有人会在您填写列表框和将该行号发送到服务器进行更新之间插入、删除或更新行。最好使用PKs(在您的情况下可能是IDs)来确定要用于更新的行 也就是说,我认为以下几点对您有效(未经测试):
您可能需要将tbl_内容添加到from语句中,并将其加入到从中获取数据的表中。如果对您有效,请接受答案
;WITH cte AS (
SELECT
txtPageContent,
ROW_NUMBER() OVER (ORDER BY ArchiveDate ASC) AS rowid
FROM
ARC_Content
WHERE
ContentID = @ContentID)
UPDATE
TC
SET
txtPageContent = cte.txtPageContent
FROM
TBL_Content TC
INNER JOIN cte ON
rowid = @rowID