2014-01-28 4 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, PRODUCTNAME, CategoryId, CategoryName и categoryDescription, которые запрашиваются из Нортвинда Продукты/Категории таблиц.

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

Вам нужно использовать два имени части в вашем выборе, чтобы разрешить неоднозначность имени, я могу увидеть одно имя столбца, для которого обязательно '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 У меня есть таблицы с северным ветром и мои другие таблицы для схемы звездочек в та же база данных для этих целей. Таблицы UPPERCASE являются частью звездной схемы, над которой я работаю. –

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; 
Смежные вопросы