Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 - Fatal编程技术网

Sql 使用来自另一个键的数据更新字段

Sql 使用来自另一个键的数据更新字段,sql,sql-server,Sql,Sql Server,我经营一个工具室,在那里我们使用数据库来跟踪我们的工具。通过在“ParentID”列中输入“parent”工具的ItemID,可以将项嵌套在其他项下。例如,扳手位于工具箱内,因此工具箱(2)的ItemID输入到扳手的ParentID字段中。下面是一个示例表: ItemID BarcodeID Name ParentId UserTxtBox 1 0001 Wrench 2 null 2 box1 To

我经营一个工具室,在那里我们使用数据库来跟踪我们的工具。通过在“ParentID”列中输入“parent”工具的ItemID,可以将项嵌套在其他项下。例如,扳手位于工具箱内,因此工具箱(2)的ItemID输入到扳手的ParentID字段中。下面是一个示例表:

ItemID  BarcodeID   Name      ParentId   UserTxtBox
1       0001        Wrench    2          null
2       box1        Tool Box  null       null
3       0002        Socket    4          null
4       box2        Tool Box  null       null
我试图将UsrTxtBox的值设置为其父项的条形码ID,如下所示:

ItemID  BarcodeID   Name      ParentId   UserTxtBox
1       0001        Wrench    2          box1
2       box1        Tool Box  null       null
3       0002        Socket    4          box2
4       box2        Tool Box  null       null
我提出但不起作用的问题是:

DECLARE @parentid int
SET @parentid = null

UPDATE dbo.items
SET @parentid = ParentId
    ,UserTxtBox = (SELECT BarcodeId FROM dbo.items WHERE ItemId = @parentID)
查询运行时不会出错,但不会进行任何更改。在我的实验过程中,如果我在where子句中用@parentid替换“2”,它确实“起作用”,但对于表中的每个项目,它当然会使UserTxtBox=box1。相反,如果我设置@parentid=2,并将变量名保留在where子句中,它仍然不起作用。我已经验证了ParentId的值存储在@ParentId中,但是当我在where子句中使用变量时,它不起作用。为什么不呢

ItemID是主键,ParentID是外键。在这些语句中,键的处理方式是否与普通整数不同


提前感谢您的帮助。在这个网站上查找了多年的答案后,这么多人抽出时间来分享他们的知识仍然让我感到惊讶。

加入
更新
怎么样

update i
    set UserTxtBox = p.BarcodeID
    from dbo.items i join
         dbo.items p
         on i.ParentId = p.ItemId;

哇,太快了。谢谢,戈登,这很有效。我还没有学会如何使用join,但是当我遇到它时,我被它使用两个表的描述所吓倒,而我只使用一个表。目前,我还不能完全理解它是如何工作的,但我会继续讲下去。要了解正在发生的事情,您可以执行
select I.*,p.*
,然后执行
from
子句。
join
正在查找父id并进行筛选(如果没有匹配项,则不会返回
i
中的行)。