2014-01-28 220 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;