Continuamente recibo estos errores cuando trato de actualizar tablas basadas en otra tabla. Termino reescribiendo la consulta, cambio el orden de las uniones, cambio algunas agrupaciones y finalmente funciona, pero simplemente no lo entiendo.
¿Qué es un 'identificador de varias partes'?
¿Cuándo no se puede vincular un 'identificador de varias partes'?
¿De qué se trata?
¿En qué casos se producirá este error?
¿Cuáles son las mejores formas de prevenirlo?
El error específico de SQL Server 2005 es:
El identificador de varias partes "..." no se pudo vincular.
Aquí hay un ejemplo:
UPDATE [test].[dbo].[CompanyDetail]
SET Mnemonic = [dbBWKMigration].[dbo].[Company].[MNEMONIC],
[Company Code] = [dbBWKMigration].[dbo].[Company].[COMPANYCODE]
WHERE [Company Name] = **[dbBWKMigration].[dbo].[Company].[COMPANYNAME]**
El error real:
Mensaje 4104, Nivel 16, Estado 1, Línea 3 No se pudo vincular el identificador de varias partes "dbBWKMigration.dbo.Company.COMPANYNAME".
fuente
En realidad, a veces, cuando está actualizando una tabla a partir de los datos de otra tabla, creo que uno de los problemas comunes que causan este error es cuando usa las abreviaturas de su tabla de manera incorrecta o cuando no son necesarias . La declaración correcta está a continuación:
Observe que la
SomeField
columna de la Tabla 1 no tiene elt1
calificador comot1.SomeField
pero es justoSomeField
.Si uno intenta actualizarlo especificando que
t1.SomeField
la declaración devolverá el error de varias partes que ha notado.fuente
ABBREVIATION.My_Field
, cuando solo necesitabaSET.My_Field
;Probablemente sea un error tipográfico. Busque los lugares en su código donde llama [esquema]. [TableName] (básicamente en cualquier lugar donde haga referencia a un campo) y asegúrese de que todo esté escrito correctamente.
Personalmente, trato de evitar esto usando alias para todas mis tablas. Ayuda enormemente cuando puede acortar un nombre de tabla largo a un acrónimo de su descripción (es decir, WorkOrderParts -> WOP), y también hace que su consulta sea más legible.
Editar: como una ventaja adicional, ahorrará TONELADAS de pulsaciones de teclas cuando todo lo que tiene que escribir es un alias de tres o cuatro letras frente al esquema, la tabla y los nombres de campo.
fuente
Enlace = su representación textual de una columna específica se asigna a una columna física en alguna tabla, en alguna base de datos, en algún servidor.
El identificador multiparte podría ser: MyDatabase.dbo.MyTable. Si obtiene alguno de estos identificadores incorrectos, entonces tiene un identificador multiparte que no se puede asignar.
La mejor manera de evitarlo es escribir la consulta correctamente la primera vez, o usar un complemento para el estudio de administración que proporcione inteligencia y, por lo tanto, lo ayude evitando errores tipográficos.
fuente
Probablemente tengas un error tipográfico. Por ejemplo, si tiene una tabla llamada Cliente en una base de datos llamada Ventas, podría referirse a ella como Ventas ... Cliente (aunque es mejor referirse a ella, incluido el nombre del propietario (dbo es el propietario predeterminado) como Sales.dbo .Cliente.
Si escribió Ventas ... Cliente, es posible que haya recibido el mensaje que recibió.
fuente
Si está seguro de que no es un error tipográfico, puede ser un error tipográfico.
¿Qué colación estás usando? Revisalo.
fuente
Al actualizar tablas, asegúrese de no hacer referencia al campo de su actualización a través del alias.
Acabo de tener el error con el siguiente código
Tuve que eliminar la referencia de alias en la instrucción set para que se lea así
fuente
Descubrí que recibo mucho esto cuando intento abreviar, como:
Cambiándolo a:
Hace que la consulta funcione y no arroje el error.
fuente
Código de error
Código de solución
como puede ver, en el código de error,
dbo.SubModule
ya está definido como SM, pero estoy usandodbo.SubModule
en la siguiente línea, por lo tanto, hubo un error. use el nombre declarado en lugar del nombre real. Problema resuelto.fuente
Tuve este problema y resultó ser un alias de tabla incorrecto. Corregir esto resolvió el problema.
fuente
El mío estaba poniendo el esquema sobre la mesa Alias por error:
fuente
Agregar alias de tabla en el campo Establecer frontal causa este problema en mi caso.
Right Update Table1 Establezca SomeField = t2.SomeFieldValue From Table1 t1 Inner Join Table2 como t2 en t1.ID = t2.ID
Actualización incorrecta Table1 Establecer t1.SomeField = t2.SomeFieldValue de Table1 t1 Inner Join Table2 como t2 en t1.ID = t2.ID
fuente
Tenía
P.PayeeName AS 'Payer' --,
y las dos líneas de comentarios arrojaron este errorfuente
De hecho, olvidé unir la mesa a los demás, por eso recibí el error
Se supone que es así:
Y no de esta manera:
fuente
Mi mejor consejo al tener el error es usar [] braquets para rodear los nombres de las tablas, la abreviatura de las tablas a veces causa errores, (a veces las abreviaturas de las tablas funcionan bien ... raro)
fuente
Estaba recibiendo este error y simplemente no podía ver dónde estaba el problema. Revisé todos mis alias y sintaxis y nada parecía fuera de lugar. La consulta fue similar a las que escribo todo el tiempo.
Decidí volver a escribir la consulta (originalmente la había copiado de un archivo de informe .rdl) a continuación, nuevamente, y funcionó bien. Mirando las consultas ahora, me parecen iguales, pero mi reescrita funciona.
Solo quería decir que valdría la pena intentarlo si nada más funciona.
fuente
Cuando escriba la tabla FROM, esos errores desaparecerán. Escriba FROM debajo de lo que está escribiendo, Intellisense funcionará y el identificador de varias partes funcionará.
fuente
Enfrenté este problema y lo resolví, pero hay una diferencia entre tu código y el mío. A pesar de que creo que puedes entender qué es "el identificador de varias partes no se pudo vincular"
Cuando usé este código
Me enfrenté al problema del identificador de varias partes
pero cuando uso una cita simple para la dirección de correo electrónico se resolvió
fuente