2017-05-12 2 views
3

Ich habe mehrere andere Fragen dieses Typs durchgesehen und habe keine gefunden, die mir helfen, dieses Problem zu lösen. Was ich versuche, ist Folgendes: Ich möchte erstellen eine Tabelle für alle Mitarbeiter zum Zweck der Zuweisung einer EmployeeID, die über mehrere andere Tabellen verwendet wird.Diese Tabelle und die anderen funktionieren gut.Mein Problem entsteht, wenn ich versuche, eine neue Tabelle basierend auf der EmployeeType erstellen, damit ich Informationen abrufen kann ausschließlich auf Mitarbeiter eines bestimmten Typs auf der Grundlage der SELECT Aussage für alle drei der Tabellen ich diesen Fehler.Inkorrekte Syntax in der Nähe von '('. Erwartete ID

Incorrect syntax near '('. Expecting ID.

ich habe gegoogelt und gegoogelt, wie es zu lösen, aber nothi Ich habe versucht, funktioniert. Was vermisse ich?

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

Versuchen Sie, 'create view' statt' create table' zu ​​erstellen? – SqlZim

+0

Nein. Es muss eine Tabelle sein. Ich habe versucht, es in eine Ansicht zu ändern, aber ich habe den gleichen Fehler. – Krystianya

Antwort

3

SQL Server verfügt nicht über eine CREATE TABLE .... AS (SELECT ...-Funktion. Das ist einfach keine gültige T-SQL-Syntax - daher der Fehler.

Wenn Sie eine neue Tabelle erstellen möchten (! Was noch nicht existiert) von einem SELECT, müssen Sie diese Syntax verwenden statt:

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

Diese nur funktioniert, wenn diese neue Tabelle - dbo.Volunteers - existiert noch nicht.

Wenn Sie Zeilen in einer vorhandene Tabelle einfügen müssen, dann müssen Sie diese Syntax verwenden:

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

Fantastisch! Das hat perfekt funktioniert. Danke für Ihre Hilfe. Sobald ich auf das Häkchen klicken kann, werde ich. (versuchte und bekam einen Fehler, der sagt, dass ich noch 9 Minuten warten muss) – Krystianya

2

würde ich sagen Sie, dass die Verwendung Ansichten werden sollten stattdessen zusätzliche Tabellen zu erstellen.

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

Ja Ansichten machen hier am meisten Sinn. Viel besser als mehrere Kopien derselben Daten, die immer nicht synchron sind. –

Verwandte Themen