如何在INSERT语句中使用内部SELECT

时间:2014-10-21 08:16:30

标签: sql-server

我有这个问题。我有一个Currency表,如下所示:

Id|IntKey|Text
1  10     USD
2  20     EUR

A有另一个表 - Accounts,其中我有外键CurrencyId。问题是,当我收集帐户信息时,Currency作为字符串值或我数据库中的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();

但这不起作用。这是可能的,我该如何实现呢?

2 个答案:

答案 0 :(得分:2)

你很接近它。

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

不需要VALUESSELECT必须包含所有列和变量。

答案 1 :(得分:1)

你尝试过括号吗?

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