2010-02-26 226 views
3

我想要做這樣的事情:插入查詢中的內部聯接?

insert into TableA 
    (val1,val2) 
values 
    ("value",(select top 1 tableB.X from tableB where [email protected])) 

我得到這個錯誤:

Subqueries are not allowed in this context. Only scalar expressions are allowed

如何阻止這種錯誤?

回答

9

假設你正在使用SQL Server:

insert into tableA 
    (val1, val2) 
select top 1 'value', tableB.x from tableB where tableB.Y = @y 
+1

+1:打我給它 – 2010-02-26 16:47:36

+0

感謝您的格式編輯和給予好評:-) – ristonj 2010-02-26 16:48:56

1

我假設你有直接插入使用到表的SELECT ...語法。
在這種情況下沒有「值」。上述
人們一直比我快,但我與他們的建議同意

1

你接近:

INSERT INTO TableA(val1, val2) 
SELECT top 1 "value", X FROM TableB WHERE Y = @y 
1

另外,劣質選項是更少的代碼變化: 定義一個臨時值。

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

然而插入語法更清晰。

+0

不正確的語法NEAD頂部? – user278618 2010-02-26 17:48:35

+0

我相信你是對的;我不相信你可以做最好的選擇到這樣的變量。也許選擇top 1? 固定查詢。 – Broam 2010-02-26 19:48:40

0
StringBuilder sb=new StringBuilder(); 
sb.Append("declare @id int select @id = top 1 TableB.id from TableB where [email protected] order by TableB.id desc insert into TableA(col1,col2,col3,col4) Values (@val1,@val2,@val3,@id)"); 

靠近頂部的語法不正確。

如何處理?

// MSSQL服務器