2014-01-28 57 views
1

我有一个在Microsoft SQL Server 2012上创建的数据库,我有两个表“dbo.Products”和“dbo.Categories”。我试图查询这两个表来为星型模式创建一个PRODUCT维度表。SQL INSERT INTO FROM SELECT

Products {ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued} 
Categories {CategoryID, CategoryName, Description} 

这两个表是从Northwind数据库

产品维度包含product_key,的productID,产品名称,的categoryID,这是从Northwind产品/分类表查询类别名称和categoryDe​​scription。

我使用的SQL代码是在这里:

/*Create Dimension Table */ 
CREATE TABLE [dbo].[PRODUCT] (
[product_key] [int] IDENTITY (1, 1) NOT NULL Primary Key, 
[productID] [int] NULL , 
[productName] nvarchar(30) NULL , 
[categoryID] [int] NULL , 
[categoryName] nvarchar(30) NULL , 
[categoryDescription] nvarchar(30) NULL 
) 

/* Populate (insert) Dimension Table with a select statement that joins 
Product and Categories. */ 
INSERT INTO [dbo].[PRODUCT] (productID, productName, categoryID, categoryName, categoryDescription) 
    SELECT 
     ProductID, ProductName, CategoryID, CategoryName, CategoryDescription 
    FROM 
     Products 
    INNER JOIN 
     Categories ON Categories.CategoryID = Products.CategoryID; 
+4

那么你的问题是什么? –

+1

您需要在您的select中使用两个部分名称来解决名称歧义问题,我可以看到一个列名肯定是“CategoryID”,可能还有更多。 –

+0

我的问题与SELECT语句中的语法有关,我尝试使用[dbo]。[Products]使用两个部分名称,但我得到“无效的对象名称”。 –

回答

1

试试这个

INSERT INTO [acs4904_a1].[dbo].[PRODUCT] 
(productID, productName, categoryID, categoryName, categoryDescription) 

SELECT 
P.ProductID, 
P.ProductName, 
C.CategoryID, 
C.CategoryName, 
C.CategoryDescription 
FROM [acs4904_a1].[dbo].Products P 
INNER JOIN [acs4904_a1].[dbo].Categories C ON P.CategoryID=C.CategoryID; 
+0

它引发错误,因为“northwind.dbo.Categories”是无效的对象名称。由于我的语法,MSSQL Server Mgmt Studio似乎无法找到产品和类别表。 –

+0

您是否在数据库列表中看到northwind数据库?你可以发布你的数据库列表的截图吗?此外,请确保您正在运行的用户可以访问Northwind数据库 –

+0

可以在此处找到屏幕截图:http://i.imgur.com/CI4ANqC.png 我有我的Northwind表和我的其他表用于这些目的的相同数据库。大写表是我正在处理的星型模式的一部分。 –

0

你有范围的共享列。

INSERT INTO [PRODUCT] (productID, productName, categoryID, categoryName, categoryDescription) 
SELECT ProductID, ProductName, Products.CategoryID, CategoryName, CategoryDescription 
FROM Products 
INNER JOIN Categories ON Categories.CategoryID=Products.CategoryID;