Вставить данные в таблицы, связанные с внешним ключом - PullRequest
1 голос
/ 13 января 2012

Сначала я попробовал это Вставить данные в таблицы, связанные внешним ключом , но ответа не получил.

У меня есть 3 таблицы:

Таблица: Клиенты

ID -------LastName-------FirstName-------PhoneNumber

Таблица: Заказ

ID-------Status-------CustomerID

Таблица: Строка заказа

ID-------OrderID-------Product-------Quantity-------PricePerUnit

Я запускаю следующий запрос

SqlCommand myCommand2 = 
   new SqlCommand(@"INSERT INTO Order (Status, CustomerID) 
                    VALUES(13016, SELECT ID FROM Customers WHERE FirstName = 'Garderp')", 
                  myConnection);`

и выдает исключение

Синтаксическая ошибка рядом с заказом

Как добавить данные в таблицу с внешним ключом в SQL Server 2008, особенно в этом конкретном случае?

Ответы [ 6 ]

5 голосов
/ 13 января 2012

ORDER является зарезервированным ключевым словом в SQL Server (используется в операции ORDER BY).

Вам необходимо разделить это имя скобками:

"INSERT INTO [Order] (Status, CustomerID) VALUES "

Это приведет к тому, что SQL Server будет воспринимать его как имя объекта, а не как ключевое слово.

4 голосов
/ 13 января 2012

Должно быть:

SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO [Order] (Status, CustomerID) " + " SELECT 13016, ID FROM Customers WHERE FirstName = 'Garderp')", myConnection);
2 голосов
/ 13 января 2012

Порядок - это ключевое слово в SQL, вы должны заключить все ключевые слова в скобки, если используете его в качестве имени таблицы или столбца.

0 голосов
/ 13 января 2012
SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order 
(Status, CustomerID)
VALUES " + "(13016, 
(SELECT ID FROM Customers WHERE FirstName = 'Garderp'))", myConnection);
0 голосов
/ 13 января 2012

попробуйте

SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order (Status, CustomerID) VALUES " + "(13016, SELECT ID FROM Customers WHERE FirstName = \'Garderp\')", myConnection);

если существует более одного клиента с именем "Gardep", этот запрос не будет выполнен. Вам нужно выбрать только одну запись. Использование TOP будет лучшей идеей здесь

SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order (Status, CustomerID) VALUES " + "(13016, SELECT TOP 1 ID FROM Customers WHERE FirstName = \'Garderp\')", myConnection);
0 голосов
/ 13 января 2012

Попробуйте использовать этот запрос

INSERT INTO [Order]
( Status, CustomerID )
SELECT 13016, ID
    FROM Customers
    WHERE FirstName = 'Garderp'
...