在sql server 2008中插入值列表
我正在尝试在SQL中插入一个列表。我从TableName1和TableName2的连接查询中获得了两个列值的列表。通过ProductId的计数,我将ProductId和数量插入到表3中。 但是插入失败,因为ProductId为null。我从Join查询中得到ProductId和Quantity的两个值,如下所示。如何将此列表插入表3 名单 SQL:在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
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;