Внутреннее объединение в запросе вставки? - PullRequest
3 голосов
/ 26 февраля 2010

Я хочу сделать что-то вроде этого:

insert into TableA 
   (val1,val2) 
values
   ("value",(select top 1 tableB.X from tableB where tableB.Y=@Y))

Я получаю эту ошибку:

Подзапросы не допускаются в этом контексте. Допускаются только скалярные выражения

Как остановить эту ошибку?

Ответы [ 6 ]

9 голосов
/ 26 февраля 2010

Если вы используете SQL Server:

insert into tableA 
  (val1, val2) 
select top 1 'value', tableB.x from tableB where tableB.Y = @y 
1 голос
/ 26 февраля 2010

Другой, более низкий вариант, который требует меньше изменений кода: Определите временное значение.

declare @scalarval int
select @scalarval = tableB.X from tableB where tableB.Y=@Y
insert into TableA (val1,val2) 
values("value",@scalarval)

Однако вставка в синтаксис более понятна.

1 голос
/ 26 февраля 2010

попробуйте

insert into TableA (val1,val2) 
   select top 1 "value",X from tableB where Y=@Y
1 голос
/ 26 февраля 2010

Ты рядом:

INSERT INTO TableA(val1, val2)
SELECT top 1 "value",  X FROM TableB WHERE Y = @y
1 голос
/ 26 февраля 2010

Я предполагаю, что вы должны использовать непосредственно вставку в TABLE select ... синтаксис.
В этом случае «значений» нет.
Люди выше были быстрее меня, но я согласен с их предложениями

0 голосов
/ 26 февраля 2010
StringBuilder sb=new StringBuilder();
sb.Append("declare @id int select @id = top 1 TableB.id from TableB where TableB.DefaultName=@DefaultName order by TableB.id desc insert into TableA(col1,col2,col3,col4)  Values (@val1,@val2,@val3,@id)");

неверный синтаксис в верхней части.

Как это сделать ??

// mssql сервер

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