Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我棘手的SQL更新查询工作得不太好_Sql_Sql Server_Database - Fatal编程技术网

我棘手的SQL更新查询工作得不太好

我棘手的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

我试图用另一个表中的另一行更新数据库中的一个表。我有两个参数,一个是ID,另一个是行号(您可以从GUI中选择所需的行)

这部分代码工作正常,返回单行中的一列

(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