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