Eu recebo esses erros continuamente quando tento atualizar tabelas com base em outra tabela. Acabo reescrevendo a consulta, altero a ordem das junções, altero alguns agrupamentos e, eventualmente, funciona, mas não entendi direito.
O que é um 'identificador de várias partes'?
Quando um 'identificador de várias partes' não pode ser vinculado?
A que isso está sendo vinculado?
Em que casos esse erro ocorrerá?
Quais são as melhores maneiras de evitá-lo?
O erro específico do SQL Server 2005 é:
O identificador de várias partes "..." não pôde ser vinculado.
Aqui está um exemplo:
UPDATE [test].[dbo].[CompanyDetail]
SET Mnemonic = [dbBWKMigration].[dbo].[Company].[MNEMONIC],
[Company Code] = [dbBWKMigration].[dbo].[Company].[COMPANYCODE]
WHERE [Company Name] = **[dbBWKMigration].[dbo].[Company].[COMPANYNAME]**
O erro real:
Msg 4104, Nível 16, Estado 1, Linha 3 O identificador de várias partes "dbBWKMigration.dbo.Company.COMPANYNAME" não pôde ser vinculado.
fonte
Na verdade, às vezes, quando você está atualizando uma tabela a partir dos dados de outra tabela, acho que um dos problemas comuns que causam esse erro é quando você usa as abreviações da tabela incorretamente ou quando não são necessárias . A declaração correta está abaixo:
Observe que a
SomeField
coluna da Tabela1 não possui ot1
qualificador,t1.SomeField
mas é apenasSomeField
.Se alguém tentar atualizá-lo especificando
t1.SomeField
a instrução, retornará o erro de várias partes que você notou.fonte
ABBREVIATION.My_Field
, quando eu só precisavaSET.My_Field
;Provavelmente é um erro de digitação. Procure os locais em seu código onde você chama [schema]. [TableName] (basicamente em qualquer lugar em que você referencie um campo) e verifique se tudo está escrito corretamente.
Pessoalmente, tento evitar isso usando aliases para todas as minhas tabelas. Ajuda tremendamente quando você pode encurtar um nome de tabela longo para um acrônimo de sua descrição (ou seja, WorkOrderParts -> WOP) e também torna sua consulta mais legível.
Editar: como um bônus adicional, você economizará TONELADAS de pressionamentos de tecla quando tudo o que você precisar digitar for um alias de três ou quatro letras versus o esquema, a tabela e os nomes de campos todos juntos.
fonte
Ligação = sua representação textual de uma coluna específica é mapeada para uma coluna física em alguma tabela, em algum banco de dados, em algum servidor.
O identificador de várias partes pode ser: MyDatabase.dbo.MyTable. Se você errar algum desses identificadores, possui um identificador de várias partes que não pode ser mapeado.
A melhor maneira de evitá-la é escrever a consulta corretamente na primeira vez ou usar um plug-in para o estúdio de gerenciamento que forneça inteligência e, assim, ajude você, evitando erros de digitação.
fonte
Você provavelmente tem um erro de digitação. Por exemplo, se você tiver uma tabela chamada Customer em um banco de dados chamado Sales, poderá se referir a ela como Sales..Customer (embora seja melhor fazer referência a ela incluindo o nome do proprietário (dbo é o proprietário padrão) como Sales.dbo .Cliente.
Se você digitou Vendas ... Cliente, pode ter recebido a mensagem que recebeu.
fonte
Se você tiver certeza de que não é um erro de ortografia, talvez seja um erro de digitação.
Que agrupamento você está usando? Verifique-o.
fonte
Ao atualizar tabelas, certifique-se de não referenciar o campo como sua atualização por meio do alias.
Eu apenas tive o erro com o seguinte código
Eu tive que remover a referência de alias na instrução set para que fique assim
fonte
Descobri que recebo muito isso quando tento abreviar, como:
Alterando para:
Faz a consulta funcionar e não gera o erro.
fonte
Erro de código
Código da solução
como você pode ver, no código de erro,
dbo.SubModule
já está definido como SM, mas estou usandodbo.SubModule
na próxima linha; portanto, ocorreu um erro. use o nome declarado em vez do nome real. Problema resolvido.fonte
Eu tive esse problema e acabou sendo um alias de tabela incorreto. Corrigir isso resolveu o problema.
fonte
O meu estava colocando o esquema na tabela Alias por engano:
fonte
Adicionar alias de tabela no campo Set frontal causa esse problema no meu caso.
Atualização à direita Tabela1 Defina SomeField = t2.SomeFieldValue Da tabela1 t1 Associação interna Tabela2 como t2 Em t1.ID = t2.ID
Atualização incorreta Tabela1 Defina t1.SomeField = t2.SomeFieldValue Da tabela1 t1 Associação interna a tabela2 como t2 Em t1.ID = t2.ID
fonte
Eu tinha
P.PayeeName AS 'Payer' --,
e as duas linhas de comentário lançaram este errofonte
Na verdade, eu esqueci de juntar a mesa aos outros, por isso recebi o erro
Deveria ser assim:
E não desta maneira:
fonte
Meu melhor conselho, ao ter o erro, é usar braquetes [] para contornar os nomes das tabelas; a abreviação de tabelas às vezes causa erros (algumas vezes as abreviações da tabela funcionam bem ... esquisitas)
fonte
Eu estava recebendo esse erro e simplesmente não conseguia ver onde estava o problema. Eu verifiquei todos os meus apelidos e sintaxe e nada parecia fora do lugar. A consulta era semelhante à que eu escrevo o tempo todo.
Decidi reescrever a consulta (originalmente eu a copiei de um arquivo .rdl de relatório) abaixo, novamente, e ela correu bem. Olhando para as consultas agora, elas parecem iguais para mim, mas minha reescrita funciona.
Só queria dizer que pode valer a pena tentar se nada mais funcionar.
fonte
Quando você digita a tabela FROM, esses erros desaparecem. Digite FROM abaixo do que sua digitação, o Intellisense funcionará e o identificador de várias partes funcionará.
fonte
Eu enfrentei esse problema e o resolvi, mas há uma diferença entre o seu e o meu. Apesar de eu acho que você pode entender o que é "o identificador de várias partes não pôde ser vinculado"
Quando eu usei esse código
Enfrentei o problema do identificador de várias partes
mas quando eu uso aspas simples para o endereço de email Ele resolveu
fonte