2009-09-29 18 views
5

Acabo de empezar a trabajar con SQL Server por primera vez y tengo problemas para completar los datos de prueba. Tengo dos tablas donde se tiene una clave externa a la otra y me gustaría ser capaz de insertar un nuevo registro utilizando el siguiente código SQL:Cómo insertar una clave externa usando un Sub-SELECT en SQL Server

insert into Employee (
    EmployeeName, 
    DepartmentId 
) values (
    "John Doe", 
    (select Id from Department where DepartmentName = 'Accounting') 
); 

Esta declaración funciona bien en Oracle, pero en SQL Server consigo una error al decir:

Subqueries are not allowed in this context. 

¿Alguien sabe la manera correcta de hacer esto en SQL Server?

Respuesta

10
INSERT INTO Employee 
    (EmployeeName, DepartmentId) 
SELECT 
    'John Doe' AS EmployeeName, Id AS DepartmentId 
FROM 
    Department WHERE DepartmentName = 'Accounting'; 
+0

Genial, eso funciona muy bien. Muchas gracias. –

5

Usted puede hacer:

insert into Employee (
    EmployeeName, 
    DepartmentId 
) 
SELECT 'John Doe', Id 
FROM Department 
WHERE DepartmentName = 'Accounting' 
1

Su consulta fallará en Oracle si hay más de un departamento de contabilidad.

Si depende de este comportamiento, utilice esta sintaxis:

INSERT 
INTO Employee 
     (
     EmployeeName, 
     DepartmentId 
     ) 
SELECT "John Doe", 
     (
     SELECT id 
     FROM Department 
     WHERE DepartmentName = 'Accounting' 
     ) 

De lo contrario, sólo tiene que utilizar la sintaxis SELECT FROM Department propuesto por otros.

Tenga en cuenta, sin embargo, que esta sintaxis se inserte John Doe dos veces o más, si hay varias filas con name conjunto de Accounting en Deparments.

+0

Tiene razón, fallaría, pero ese es el comportamiento que me gustaría en lugar de insertar dos filas. Solo estoy usando esto para completar algunos datos de prueba. Muchas gracias por el comentario. –

+0

'@Kevin Stembridge': ¿Entonces quieres que falle o insertar dos filas? Mi consulta fallará – Quassnoi

Cuestiones relacionadas