sql вставка в значения Не удалось связать идентификатор из нескольких частей - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь выполнить эту команду, которая должна добавить 80 строк ... но я получаю.

Сообщение 4104, Уровень 16, Состояние 1, Строка 1 Не удалось определить идентификатор из нескольких частей "Frame.Guid"быть связанным.

 INSERT  INTO  studentrecords(recordGuid, studentGuid, courseGuid, licenseGuid, repeatflag, frameGuid, coredata, framescore, timeinframe, locked, daterefreshed, dateinserted)
 VALUES     (NEWID(), '25d6e1d9-e5ce-42dd-bd6a-5956ec7cb047', '54dffd58-1af9-44cf-982e-ea0e8930878e', '00000000-1111-1111-0000-000000000000', 0, Frame.Guid,  '<flags><flag1>1</flag1> <flag2>1</flag2> <flag3>1</flag3> <flag4>1</flag4> <flag5>1</flag5><flag6>1</flag6></flags><StudentAnswer> <CorrectionHistory></CorrectionHistory> </StudentAnswer>', 0, 55860, 1, GETDATE(), GETDATE())
 Select Frame.Guid FROM Frame
 WHERE  (Frame.Course = '54dffd58-1af9-44cf-982e-ea0e8930878e') AND (Frame.Template <> '7d3a3b40-86e3-43f4-a4ca-039afdd0b7a3')

Ответы [ 4 ]

2 голосов
/ 23 марта 2011
INSERT INTO studentrecords (
                            recordGuid, studentGuid, courseGuid, licenseGuid, 
                            repeatflag, frameGuid, coredata, 
                            framescore, timeinframe, locked, 
                            daterefreshed, dateinserted
                           ) 
   SELECT NEWID(), 
          '25d6e1d9-e5ce-42dd-bd6a-5956ec7cb047', 
          '54dffd58-1af9-44cf-982e-ea0e8930878e', 
          '00000000-1111-1111-0000-000000000000', 
          0, Frame.Guid, '1 1 1 1 11 ', 0, 55860, 1, 
          GETDATE(), GETDATE() 
     FROM Frame 
    WHERE Frame.Course = '54dffd58-1af9-44cf-982e-ea0e8930878e'
          AND Frame.Template <> '7d3a3b40-86e3-43f4-a4ca-039afdd0b7a3';
1 голос
/ 23 марта 2011

Вы ссылаетесь на Frame.Guid в операторе вставки, но он не определен. Я подозреваю, что вы хотите выбрать это значение в переменную, а затем использовать переменную в операторе вставки.

DECLARE @frameGUID GUID

SET @frameGUID = (Select Frame.Guid FROM Frame
WHERE  (Frame.Course = '54dffd58-1af9-44cf-982e-ea0e8930878e')
   AND (Frame.Template <> '7d3a3b40-86e3-43f4-a4ca-039afdd0b7a3'))

INSERT  INTO  studentrecords(recordGuid, studentGuid, courseGuid, licenseGuid, repeatflag, frameGuid, coredata, framescore, timeinframe, locked, daterefreshed, dateinserted)
VALUES  (
    NEWID(),
    '25d6e1d9-e5ce-42dd-bd6a-5956ec7cb047',
    '54dffd58-1af9-44cf-982e-ea0e8930878e',
    '00000000-1111-1111-0000-000000000000',
    0,
    @frameGUID,
    '<flags><flag1>1</flag1> <flag2>1</flag2> <flag3>1</flag3> <flag4>1</flag4> <flag5>1</flag5><flag6>1</flag6></flags><StudentAnswer> <CorrectionHistory></CorrectionHistory> </StudentAnswer>',
    0,
    55860,
    1,
    GETDATE(),
    GETDATE())
1 голос
/ 23 марта 2011

Я не вижу, как вы хотите, чтобы запросы «вставка» и «выбор» здесь были связаны - они оба синтаксически завершены, но никак не связаны. Вы ожидаете, что "Frame.Guid" в первом запросе придет от второго запроса, но я не совсем понимаю, как. В любом случае, это все, что говорится в сообщении об ошибке; он не может точно сказать, что вы имеете в виду под Frame.Guid.

0 голосов
/ 23 марта 2011

У вас есть два утверждения там.Оператор INSERT не может знать, что вы хотите получить поле Frame.Guid из оператора SELECT.

Вы должны преобразовать его в одно утверждение.Это можно сделать, поместив все константы в оператор SELECT (между SELECT и FROM) и удалив предложение VALUES.Тогда это будет одно утверждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...