2017-05-12 8 views
3

このタイプの他のいくつかの質問を見てきましたが、この問題を解決するのに役立つものは見つかりませんでした。 EmployeeIDを割り当てることを目的とした全従業員のテーブルです。そのテーブルと他のテーブルは正常に動作します。EmployeeTypeに基づいて新しいテーブルを作成しようとすると、問題が発生します。単に特定のタイプの従業員に基づいて、私はこのエラーを取得するテーブルの3つのすべてのためのSELECT声明で:。'('に近い構文が間違っています。Expecting ID

Incorrect syntax near '('. Expecting ID.

私はグーグルとグーグル、それを解決する方法のために、しかしnothiました試したことが働いています。私は何が欠けていますか?

CREATE TABLE Employees 
(
    EmployeeID  int    NOT NULL PRIMARY KEY IDENTITY, 
    EmpFirstName char(50)  NOT NULL, 
    EmpLastName  char(50)  NOT NULL, 
    EmpAddress  varchar(50)  NOT NULL, 
    EmpCity   char(50)  NOT NULL, 
    EmpState  char(2)   NOT NULL, 
    EmpZipCode  varchar(10)  NOT NULL, 
    EmpPhone  varchar(12)  NOT NULL, 
    EmpJobTitle  char(30)  NOT NULL, 
    EmployeeType char(30)  NOT NULL, 
    Salary   money   NOT NULL, 
    HoursPerWeek int    NOT NULL, 
); 

CREATE TABLE Collective AS 
    (SELECT 
     * 
    FROM  
     [dbo].[Employees] 
    WHERE 
     EmployeeID = Employees.EmployeeID 
     AND EmployeeType = 'Collective'); 

CREATE TABLE PaidStaff AS 
    (SELECT 
     EmployeeID AS ReviewerID, 
     EmpFirstName, 
     EmpLastName, 
     EmpAddress, 
     EmpCity, 
     EmpState, 
     EmpZipCode, 
     EmpPhone, 
     EmpJobTitle 
     Salary, 
     HoursPerWeek 
    FROM  
     Employees 
    WHERE 
     EmployeeID = Employees.EmployeeID 
     AND EmployeeType = 'PaidStaff'); 

CREATE TABLE Volunteers AS 
    (SELECT 
     EmployeeID AS ReviewerID, 
     EmpFirstName, 
     EmpLastName, 
     EmpAddress, 
     EmpCity, 
     EmpState, 
     EmpZipCode, 
     EmpPhone, 
     EmpJobTitle 
    FROM  
     Employees 
    WHERE 
     EmployeeType = 'Volunteer'); 
+0

'create table'の代わりに' view'を作成しようとしていますか? – SqlZim

+0

いいえテーブルである必要があります。私はそれをビューに変更しようとしましたが、同じエラーが発生しました。 – Krystianya

答えて

3

SQL ServerにはCREATE TABLE .... AS (SELECT ...機能がありません。それはちょうど有効なT-SQL構文ではありません。したがって、エラーです。

あなたはSELECTから(まだ存在していません!)新しいテーブルを作成したい場合は、代わりにこの構文を使用する必要があります。

SELECT 
    EmployeeID AS ReviewerID, 
    EmpFirstName, 
    EmpLastName, 
    EmpAddress, 
    EmpCity, 
    EmpState, 
    EmpZipCode, 
    EmpPhone, 
    EmpJobTitle 
INTO 
    dbo.Volunteers  
FROM  
    dbo.Employees 
WHERE 
    EmployeeType = 'Volunteer'; 

こののみ作品であればその新しいテーブル - dbo.Volunteers - はまだ存在しません

あなたは既存のテーブルに行を挿入する必要がある場合は、この構文を使用する必要があります。

INSERT INTO dbo.Volunteers (list-of-columns) 
    SELECT (list-of-columns) 
    FROM dbo.Employees 
    WHERE EmployeeType = 'Volunteer'; 
+1

素晴らしい!それは完璧に働いた。ご協力ありがとうございました。私がチェックマークをクリックするとすぐに私は行います。 (試してみて、9分以上待たなければならないというエラーが出た) – Krystianya

2

私はあなたの代わりに、余分なテーブルを作成することのためにビューを使用する必要があると言うでしょう。

CREATE TABLE Employees 
(
    EmployeeID  int    NOT NULL PRIMARY KEY IDENTITY, 
    EmpFirstName char(50)  NOT NULL, 
    EmpLastName  char(50)  NOT NULL, 
    EmpAddress  varchar(50)  NOT NULL, 
    EmpCity   char(50)  NOT NULL, 
    EmpState  char(2)   NOT NULL, 
    EmpZipCode  varchar(10)  NOT NULL, 
    EmpPhone  varchar(12)  NOT NULL, 
    EmpJobTitle  char(30)  NOT NULL, 
    EmployeeType char(30)  NOT NULL, 
    Salary   money   NOT NULL, 
    HoursPerWeek int    NOT NULL 
); 
go 
CREATE view Collective AS 
    (SELECT 
     * 
    FROM  
     [dbo].[Employees] 
    WHERE 
     --EmployeeID = Employees.EmployeeID AND /* this does not do anything */ 
     EmployeeType = 'Collective'); 
go 
CREATE view PaidStaff AS 
    (SELECT 
     EmployeeID AS ReviewerID, 
     EmpFirstName, 
     EmpLastName, 
     EmpAddress, 
     EmpCity, 
     EmpState, 
     EmpZipCode, 
     EmpPhone, 
     EmpJobTitle 
     Salary, 
     HoursPerWeek 
    FROM  
     Employees 
    WHERE 
     --EmployeeID = Employees.EmployeeID AND /* this does not do anything */ 
     EmployeeType = 'PaidStaff'); 
go 
CREATE view Volunteers AS 
    (SELECT 
     EmployeeID AS ReviewerID, 
     EmpFirstName, 
     EmpLastName, 
     EmpAddress, 
     EmpCity, 
     EmpState, 
     EmpZipCode, 
     EmpPhone, 
     EmpJobTitle 
    FROM  
     Employees 
    WHERE 
     EmployeeType = 'Volunteer'); 
+2

ここでは、意見が最も合理的です。いつも同期しなくなる同じデータの複数のコピーよりもはるかに優れています。 –

関連する問題