Я запустил инструментальную комнату, где мы используем базу данных для отслеживания наших инструментов. Элементы могут быть вложены под другие элементы, введя ItemID «родительского» инструмента в столбце «ParentID». Например, ключ находится внутри ящика для инструментов, поэтому ItemID ящика для инструментов (2) вводится в поле 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 к BarcodeID из его родительский элемент, как показано здесь:
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)
Запрос выполняется без ошибок, но не вносит никаких изменений. В ходе моих экспериментов, если я заменяю «2» для @parentid в предложении where, он «работает», но, конечно, это сделает UserTxtBox = box1 для каждого элемента в таблице. Если вместо этого я устанавливаю @parentid = 2 и оставляю имя переменной в предложении where, оно все равно не работает. Я проверил, что значение ParentId хранится в @parentid, но когда я использую переменную в предложении where, она не работает. Почему нет?
ItemID - это первичный ключ, а ParentID - это внешний ключ. Являются ли ключи обработаны по-разному от простых целых чисел в этих утверждениях?
Заранее благодарим за любую помощь. После нескольких лет поиска ответов на этом сайте меня все еще удивляет, что многие люди отдают свое время, чтобы поделиться своими знаниями.
Вау, это было быстро. Спасибо, Гордон, это работает. Я еще не научился использовать соединение, но когда я наткнулся на него, меня отвлекло его описание, используя две таблицы, в которых я работаю только с одним. На данный момент я не могу полностью окунуться в то, как это работает, но я буду продолжать. –
Чтобы получить представление о том, что происходит, вы можете сделать 'select i. *, P. *', За которым следует предложение 'from'. «Join» также ищет родительский идентификатор и фильтрацию (если нет совпадения, то строка в 'i' не возвращается). –