2011-02-02 9 views
3

私はINSERT文で複数のSELECT文を持つクエリを書いていますエラーが

INSERT INTO dbo.Products 
    (ProductName, 
    SupplierID, 
    CategoryID, 
    UnitsInStock, 
    UnitsOnOrder, 
    ReorderLevel, 
    Discontinued) 
VALUES 
    ('Twinkies' , 
    (SELECT SupplierID FROM dbo.Suppliers WHERE CompanyName = 'Lyngbysild'), 
    (SELECT CategoryID FROM dbo.Categories WHERE CategoryName = 'Confections'), 
    0, 
    0, 
    10, 
    0) 

は、実際にはエラーに

Msg 1046, Level 15, State 1, Line 4 
Subqueries are not allowed in this context. Only scalar expressions are allowed. 
Msg 102, Level 15, State 1, Line 4 
Incorrect syntax near ','. 

を与えます1つの値。

答えて

7

だけ外側の括弧を選択して削除するには値を変更します。

INSERT INTO dbo.Products 
(ProductName, 
SupplierID, 
CategoryID, 
UnitsInStock, 
UnitsOnOrder, 
ReorderLevel, 
Discontinued) 
SELECT 
'Twinkies' , 
(SELECT SupplierID FROM dbo.Suppliers WHERE CompanyName = 'Lyngbysild'), 
(SELECT CategoryID FROM dbo.Categories WHERE CategoryName = 'Confections'), 
0, 
0, 
10, 
0 

また、部分式にTOP 1が必要な場合がありますが、それは別のエラーメッセージを与える:サブクエリは複数の値が返されました。

+0

+1ありがとう... – Azhar

+0

私はこの解決策に従っていますが、 ''サブクエリは2つ以上の値を返しました。サブクエリが=、!=、<, <= , >、> =、サブクエリが式として使用されるときは、これは許可されません。私はこれをどのように修正すべきですか? – overloading

+0

@overloadingというエラーは、それが言うことを意味します。サブセレクトを変更して、複数の結果が存在しないことを確認する必要があります。あなたのやり方はあなたの状況によって異なります。 T-SQLでは、 'TOP 1'と' ORDER BY'を使って結果を制限したり、さらに 'WHERE'条件を指定することができます。それは本当にあなたがやっていることにかかっています。 – harpo

0

エラーメッセージは、(技術的に)それが列のどの行を表示する必要があり、複数の行を返すことができ

SELECT SupplierID FROM dbo.Suppliers WHERE CompanyName = 'Lyngbysild' 

ので、正しいですか?

このサブクエリが1つの行のみを返すことがわかっている場合は、最初の行を取得するようデータベースに指示します。

SELECT TOP 1 SupplierID FROM dbo.Suppliers WHERE CompanyName = 'Lyngbysild' 
+0

トップにもエラーが返されます – Azhar