ストアドプロシージャの実行中に問題が発生しています。以下のようなストアドプロシージャの実行時にエラーが表示される
エラー:
は私のクエリです:サブクエリは複数の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。ここで
Create procedure [dbo].[Mysp]
as
BEGIN
Declare @Id int
Declare @MyspRemainingIdFromProduct varchar(max)
Declare @StoreDeleteQuery varchar(max)
Declare @i int
Declare @MyspAddIdFromProduct varchar(max)
set @MyspRemainingIdFromProduct =
(SELECT Mysp_abc_Product.Id
FROM Mysp_abc_Product
LEFT OUTER JOIN Product ON Mysp_abc_Product.ID = Product.ID
WHERE Product.ID IS NULL)
set @StoreDeleteQuery = 'DELETE FROM Mysp_abc_Product WHERE Id IN (' + @MyspRemainingIdFromProduct + ')'
exec(@StoreDeleteQuery)
set @MyspAddIdFromProduct =
(SELECT Product.Id
FROM Product
LEFT OUTER JOIN Mysp_abc_Product ON Mysp_abc_Product.ID = Product.ID
WHERE Mysp_abc_Product.ID IS NULL)
WHILE (@i <= @MyspAddIdFromProduct)
BEGIN
--Insert data into Mysp_abc_Product where condition is p.Deleted = 'False' or p.Published = 'True' or VisibleIndividually = 'True'
INSERT INTO Mysp_abc_Product(ProductId, abcStatus, IsDeleted, InTime, StoreId, LanguageId)
SELECT
p.Id, 1, 0, GETDATE(), s.Id, l.Id
FROM
Language l, Store s, Product p
LEFT JOIN
Mysp_abc_Product isp on isp.ProductId = p.Id
WHERE
isp.Id IS NULL
AND p.Deleted = 'False'
OR p.Published = 'True' OR VisibleIndividually = 'True'
--Insert data into Mysp_abc_Product where condition is p.Deleted = 'True' or p.Published = 'False' or VisibleIndividually = 'False'
INSERT INTO Mysp_abc_Product(ProductId, abcStatus, IsDeleted, InTime, StoreId, LanguageId)
SELECT
p.Id, 1, 1, GETDATE(), s.Id, l.Id
FROM
Language l, Store s, Product p
LEFT JOIN
Mysp_abc_Product isp ON isp.ProductId = p.Id
WHERE
isp.Id IS NULL
AND p.Deleted = 'True'
OR p.Published = 'False'
OR VisibleIndividually = 'False'
END
END
エラーメッセージにすべてが表示されます。許可されていない行が1行以上返されるサブクエリがあります。 (おそらくその割り当て。) – jarlh
[古いスタイルのJOINを使用して蹴る悪い習慣](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using- old-style-joins.aspx) - 古い形式の*カンマで区切られたテーブル*のリストが、ANSI - ** 92 ** SQL標準(*以上の* ANSI 'JOIN'構文)に置き換えられました。 20歳**前)、その使用はお勧めしません。そして、あなたは***間違いなく*** ***ミックス***二つのスタイル! –
私は動的SQLの必要性を見ません。あなたが本当に他の選択肢を持っていない場合のみ、動的SQLを使用してください。 –