Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql server 2008中插入值列表_Sql_Sql Server 2008_Join_Insert - Fatal编程技术网

在sql server 2008中插入值列表

在sql server 2008中插入值列表,sql,sql-server-2008,join,insert,Sql,Sql Server 2008,Join,Insert,我正在尝试在SQL中插入一个列表。我从TableName1和TableName2的连接查询中获得了两个列值的列表。通过ProductId的计数,我将ProductId和数量插入到表3中。 但是插入失败,因为ProductId为null。我从Join查询中得到ProductId和Quantity的两个值,如下所示。如何将此列表插入表3 名单 SQL: DECLARE@productid int 声明@quantity int SET@productid=选择一个[productid], A来自[T

我正在尝试在SQL中插入一个列表。我从TableName1和TableName2的连接查询中获得了两个列值的列表。通过ProductId的计数,我将ProductId和数量插入到表3中。 但是插入失败,因为ProductId为null。我从Join查询中得到ProductId和Quantity的两个值,如下所示。如何将此列表插入表3

名单

SQL:

DECLARE@productid int
声明@quantity int
SET@productid=选择一个[productid],
A来自[TableName1]的[Quantity]A
内部联接[TableName2]B
在[OrderId]=B[OrderId]上,其中B[CustomerId]=1和A[OrderId]=68
设置@数量=选择
A来自[TableName1]的[Quantity]A
内部联接[TableName2]B
在[OrderId]=B[OrderId]上,其中B[CustomerId]=1和A[OrderId]=68
声明@i int=0
声明@pcount int=(从[TableName1]中选择COUNT(ProductId)A
内部联接[TableName2]B
在[OrderId]=B[OrderId]上,其中B[CustomerId]=1和
A.[OrderId]=68)

虽然@i您最好将其作为基于集合的操作编写:

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;

哇!简单的解决方案。只换了这一行。[ProductId]=E[ProductId]上的内部联接[TableName5]E。
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
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;