0

SQL にリストを挿入しようとしています。TableName1 と TableName2 の JOIN クエリから 2 つの列値のリストを取得します。ProductId の数を使用して、ProductId と Quantity を Table3 に挿入しています。しかし、ProductId が null であるため、挿入は失敗します。以下のように、結合クエリから ProductId と Quantity の 2 つの値を取得します。このリストを Table3 に挿入する方法 ??

リスト

ProductId  Quantity 
56           1
58           2   

SQL:

DECLARE @productid int 
DECLARE @quantity int 

SET @productid  = SELECT A.[ProductId],
A.[Quantity] FROM [TableName1] A
INNER JOIN [TableName2] B
ON A.[OrderId] = B.[OrderId]  WHERE B.[CustomerId] = 1 AND A.[OrderId] = 68


SET @quantity  = SELECT 
A.[Quantity] FROM [TableName1] A
INNER JOIN [TableName2] B
ON A.[OrderId] = B.[OrderId]  WHERE B.[CustomerId] = 1 AND A.[OrderId] = 68


DECLARE @i int = 0
DECLARE @pcount int =  (SELECT COUNT(ProductId) FROM [TableName1] A
INNER JOIN [TableName2] B
ON A.[OrderId] = B.[OrderId]  WHERE B.[CustomerId] = 1 AND
 A.[OrderId] = 68)

WHILE @i <= @pcount 

BEGIN   

    SET @i = @i + 1

    DECLARE @productname nvarchar(MAX)
    SET @productname = (SELECT [ProductName] FROM [TableName4] WHERE [ProductId]= @productid)


    DECLARE @PRate decimal
    SET @PRate =(SELECT [SpecialPrice] FROM [TableName5] 
    WHERE [ProductId]=@productid)


    DECLARE @SPrice decimal
    SET @SPrice = @PRate * @quantity

    INSERT INTO [Table3]
    [ProductId],[ProductName],[Quantity],[Price],[TotalAmount]) 
    VALUES
    (@productid,@productname,@quantity,@PRate,@SPrice)
END

ループ内の製品 ID と数量を Table3 に渡して挿入する方法。
ループ中にコードに間違いがありましたか??

4

1 に答える 1

2

これをセットベースの操作として記述した方がよい場合があります。

WITH pq AS
(
    SELECT
     A.[ProductId]
    ,A.[Quantity]
    ,D.[ProductName]
    ,E.[SpecialPrice]
    ,E.[SpecialPrice]*A.[Quantity] AS SPrice
    FROM [TableName1] A
    INNER JOIN [TableName2] B
    ON A.[OrderId] = B.[OrderId]
    INNER JOIN [TableName4] D
    ON A.[ProductId] = D.[ProductId]
    INNER JOIN [TableName5] E
    ON A.[ProductId] = D.[ProductId]
    WHERE B.[CustomerId] = 1 
    AND A.[OrderId] = 68
)
INSERT INTO [Table3]
([ProductId]
,[ProductName]
,[Quantity]
,[Price]
,[TotalAmount])
SELECT
 [ProductId]
,[ProductName]
,[Quantity]
,[SpecialPrice]
,SPrice
FROM pq;
于 2013-08-27T14:44:44.133 に答える