2014-10-21 5 views
0

У меня есть эта проблема. У меня есть Currency таблицу, которая выглядит следующим образом:Как использовать внутренний SELECT внутри оператора INSERT

Id|IntKey|Text 
1 10  USD 
2 20  EUR 

А есть еще одна таблица - Accounts, где у меня есть Foreign Key CurrencyId. Проблема в том, что когда я собираю информацию для учетной записи, валюта приходит ко мне как строковое значение или значение столбца Text в моей базе данных. Однако я хочу использовать IntKey, чтобы соответствовать CurrencyId, так что я хочу в моем INSERT запросе, чтобы предоставить IntKey на основе строки, оцененной.

Самый простой способ, что я могу реализовать себя сначала взять значение мне нужно, это просто выполнение проектно отдельный выбор как

SELECT IntKey FROM Currency WHERE Text = @param

затем выполнить его, возьмите значение и использовать его в моем INSERT однако Я бы Лик, чтобы объединить его с одного запроса (если это возможно), я попытался это:

INSERT INTO [DB].[dbo].[Accounts] VALUES 
(@IBAN, SELECT IntKey FROM [dbo].[Currency] WHERE Text = @param, ...) 

, а затем

SqlCommand command = new SqlCommand(insertNewAccount, connection); command.ExecuteScalar();

Но это не сработает. Возможно ли это и как его реализовать?

ответ

1

Вы пытались вставить в круглые скобки?

INSERT INTO [DB].[dbo].[Accounts] VALUES 
(
    @IBAN, 
    (SELECT IntKey FROM [dbo].[Currency] WHERE Text = @param), 
    ... 
) 
2

Вы были близки к нему.

INSERT INTO [DB].[dbo].[Accounts] 
SELECT @IBAN, @otherValue, @anotherValue, IntKey FROM [dbo].[Currency] 
WHERE Text = @param 

Нет необходимости VALUES и SELECT должен быть вокруг все столбцы и переменные.

+0

Я получаю этот запрос '" INSERT INTO [DB]. [DBO]. [Счета] ВЫБРАТЬ @ IBAN, IntKey FROM [DBO]. [Валюта] WHERE Text = @param, ..', который, когда я попробуйте выполнить, дает мне erro «Недопустимый синтаксис рядом», « – Leron

+0

К сожалению, я пропустил ваш вопрос. Если вы хотите вставить другие столбцы, они должны быть в 'SELECT', как' @ variables' или столбцы из запроса. –