2013-08-27 5 views
0

Я пытаюсь вставить список в SQL. Я получаю список из двух значений столбца из запроса JOIN из TableName1 и TableName2. При подсчете ProductId, я вставляю ProductId и Quantity в таблицу3. Но вставка не работает, поскольку ProductId имеет значение NULL. Я получаю два значения для ProductId и Quantity из запроса Join, как показано ниже. Как вставить этот список в таблицу3?Вставить список значений в sql server 2008

СПИСОК

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][email protected]) 


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

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

Как я прохожу ProductID и количество в цикле к Table3 для вставки.
Любая ошибка в моем коде во время цикла?

ответ

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; 
+0

Wow. Простое решение. Изменена только эта строка. INNER JOIN [TableName5] E ON A. [ProductId] = E. [ProductId]. – kk1076

Смежные вопросы