2012-01-13 1 views
1

Прежде всего я пробовал это Insert Data Into Tables Linked by Foreign Key и не получил ответа.Вставьте данные в таблицы, связанные с внешним ключом

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

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

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

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

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

Таблица: OrderLine

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, особенно в этом конкретном случае?

+0

FYI вы можете принять только один ответ :) Я думаю, что у Икара самый полный. – JNK

+0

Хорошо, tnx для info :) – Bip

ответ

4

Оно должно быть:

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

В вашей инструкции SQL отсутствует ( – thang

5

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

Вам необходимо разграничить это имя в квадратных скобках:

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

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

0

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

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

попробовать этот

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); 
+1

-1 - вы предоставили 20 ответов и должны знать, как отмечать код на данный момент. – JNK

+1

Также это плохой ответ, так как вы не являетесь учетной записью для зарезервированного слова используется как имя таблицы, а 'TOP 1' будет отбрасывать дополнительные результаты, которые он может захотеть. – JNK

+0

Если вы не используете верхнюю часть 1 и есть несколько строк, запрос будет терпеть неудачу. Вы, кажется, новичок. , я не знаю, как отформатировать код.Я считаю, что если у вас есть навыки, вам не нужна ложка кормления –

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

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