Solucionando problemas de implantação, desenvolvimento e projeto de banco de dados
Quando você cria, modificar, criar ou implantar projetos de banco de dados, você pode encontrar os seguintes problemas:
Erros de objetos de banco de dados
Uso de novas palavras reservadas no Microsoft SQL Server 2005
Diferenças na compilação de linha de comando
As dependências e os Scripts de atualização
Identificadores podem causar problemas com o recarregamento do projeto
O estado interno do banco de dados é inconsistente com seu conteúdo
Desfazer alterações pendentes
Windows NT usuário ou grupo não encontrado
Nomes de objeto duplicados e arquivos excluídos
Nomes qualificados de banco de dados e qualificado do servidor
Desempenho do esquema de banco de dados de importação
Navegação de erros de compilação
Ao usar referências de banco de dados entre os erros de sintaxe
Renomeando o SQLCLR projetos e Assemblies
Não há suporte para sintaxe STOPLIST de texto completo
Cláusula SORT_IN_TEMPDB não é importada.
O estado de identificadores entre aspas é perdido quando você importar as funções com valor de tabela que contêm várias instruções
Alguns erros de projeto não são limpas depois de compilar o projeto.
Erros de objetos de banco de dados
Quando um o objeto de banco de dados contém um ou mais erros de sintaxe, o erro associado, as mensagens aparecem na Error List janela.
Observação |
---|
A mensagem de erro aparece no Error List janela deve fornecer informações sobre o que você pode fazer para resolver o erro. Depois de resolver o erro e salvar o objeto de banco de dados, o ícone desse objeto de banco de dados retorna ao estado normal e o erro é removido o Error List janela. |
Uso de novas palavras reservadas no Microsoft SQL Server 2005
A seguir estão novas palavras-chave reservadas, em SQL Server 2005: EXTERNAL, PIVOT, , REVERT, TABLESAMPLE, e UNPIVOT. Uma mensagem de erro aparece no saída janela se você usá-los reservado palavras-chave, como nomes de objeto de esquema em um projeto de banco de dados que é direcionada para Microsoft SQL Server 2005 ou SQL Server 2008.
Observação |
---|
Para contornar essa restrição, você pode colocar os nomes de objeto de esquema entre aspas. Por exemplo, você pode usar "CREATE TABLE [externos] (c1 INT)". |
Diferenças na compilação de linha de comando
Se você executar uma compilação de linha de comando quando você tem o projeto aberto no Visual Studio, você não poderá receber todos os erros de compilação que você recebe quando você constrói a interface do usuário.
Observação |
---|
Para contornar esse problema, feche o projeto de banco de dados Visual Studio antes de executar uma compilação de linha de comando. |
As dependências e os Scripts de atualização
Para gerar a ordem correta de objetos em um script de atualização, a comparação entre esquemas examina dependências entre objetos. Por exemplo, se um modo de exibição depende de uma tabela, a tabela deve ser criada antes da exibição. Se o objeto que depende o segundo objeto usar um nome qualificado do esquema, a dependência não pode ser identificada e o script de atualização ou criação pode ter instruções em uma ordem incorreta. Essa diferença pode causar erros quando você atualiza um destino para corresponder a uma fonte ou implantar alterações em um banco de dados. Esse problema também se aplica aos scripts de compilação do banco de dados.
Observação |
---|
Para contornar esse problema, certifique-se os nomes dos objetos que estão envolvidos em relacionamentos dependentes de qualificar de esquema. Em Visual Studio Premium e Visual Studio Ultimate, você pode usar o banco de dados de refatoração para qualificar totalmente nomes de objeto. Para obter mais informações, consulte Qualificar totalmente os nomes dos objetos de banco de dados.O exemplo a seguir, você pode garantir que a dependência será identificada corretamente se você alterar o final da instrução para referência [dbo].[KeysTable] em vez de apenas KeysTable: |
CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable
Identificadores podem causar problemas com o recarregamento do projeto
Erros será exibido quando você salva objetos ou carrega um banco de dados que contém identificadores entre aspas, se o SET quoted_identifier caixa de seleção é desmarcada nas propriedades do banco de dados. Essa situação pode ocorrer se você importar um esquema de banco de dados de um banco de dados usado identificadores entre aspas.
Observação |
---|
Para contornar esse problema, você tem duas opções. Você pode modificar as definições de objeto, use colchetes em vez de aspas. Por exemplo, você pode alterar o "My Table" para [minha tabela]. Como alternativa, você pode abrir o projeto menu, clique em DatabaseProject Propriedades, clique o Propriedades de banco de dados guia e selecione o SET quoted_identifier caixa de seleção. |
O estado interno do banco de dados é inconsistente com seu conteúdo
Você pode receber o seguinte erro quando você trabalha com Visual Studio Premium: "O estado interno do projeto de banco de dados é inconsistente com seu conteúdo. Descarregar o projeto e, em seguida, recarregá-lo para resolver o problema. Este erro indica que, de alguma forma, o projeto, que mantém uma lista dos arquivos que ele acredita que ele contém, não está mais sincronizado com o estado dos arquivos. O motivo mais comum, por que você pode encontrar esse erro é que se um dos arquivos em seu projeto será excluído do disco quando o projeto de banco de dados não estiver aberto. Esse erro também pode resultar se ocorrerem problemas, quando você importa um esquema de banco de dados.
Observação |
---|
Para contornar esse problema, você pode clicar em sincronizar em Visualização Esquema. Se isso não funcionar, você pode descarregar e recarregar o projeto de banco de dados. Para fazer isso, clique em Solution Explorer. Abrir o projeto menu e clique Unload Project. Depois que o projeto é descarregado, abra o projeto menu e clique Reload Project. |
Desfazer alterações pendentes
Modo de exibição do esquema não atualiza automaticamente depois que você usa o comando Desfazer alterações pendentes de versão controle do seu sistema. Se, por exemplo, você pode renomear uma tabela ou uma coluna e, em seguida, reverte essas alterações, a mensagem "alteração de arquivo externo, required… de ressincronização" aparece na Visualização Esquema.
Observação |
---|
Para contornar esse problema, você deve clicar em sincronizar sobre o Visualização Esquema barra de ferramentas. |
Windows NT usuário ou grupo não encontrado
Se o seu projeto de banco de dados faz referência a um logon que não está disponível, a seguinte mensagem de erro aparece: "Windows NT usuário ou grupo 'domainname\loginname' não foi encontrado. Verifique o nome novamente." Você pode encontrar esse problema se você trabalha em um computador que esteja em um domínio diferente do banco de dados cujo esquema foi importada. Essa situação geralmente ocorre se você trabalha em casa, em um projeto de banco de dados é criado em outro lugar. Nessa situação, você não pode criar ou implantar o projeto de banco de dados.
Observação |
---|
Você pode criar o usuário, omitindo a cláusula de LOGIN. Por exemplo, você pode usar o seguinte: CREATE USER [Domain\someLogin]. O usuário será criado quando você implanta o projeto de banco de dados e será associado com o login [Domain\someLogin], mas você não precisa de uma referência para o logon em seu projeto de banco de dados. |
Nomes de objeto duplicados e arquivos excluídos
Se você tiver os nomes de objeto duplicado em seu projeto de banco de dados (por exemplo, duas tabelas que são nomeados de pedidos), uma mensagem de erro aparece no Error List janela. Mesmo se você resolver o problema excluindo o arquivo que contém a definição de um dos objetos, a mensagem de erro não desaparecer imediatamente.
Observação |
---|
Para contornar esse problema, você pode clicar em Atualizar ou modificar o arquivo que contém a definição de objeto, renomear o objeto e salve o arquivo. |
Nomes qualificados de banco de dados e qualificado do servidor
Quando você cria um objeto em Visual Studio Premium, o objeto é nomeado de acordo com o [esquema]. [objeto].convenção de nomenclatura [filho]. Se você deseja se referir a um objeto em outro banco de dados ou em outro servidor, você pode incluir o nome do banco de dados e o servidor da seguinte maneira: [servidor].[banco de dados].esquema.objeto.filho. Se você criar um procedimento armazenado ou um modo de exibição que se refere a um objeto que requer um nome qualificado do banco de dados ou qualificado do servidor, será exibido um aviso.
Observação |
---|
Para resolver esse aviso, você deve definir uma referência entre bancos de dados. Para obter mais informações sobre referências cruzadas banco de dados, consulte Usar referências em projetos de banco de dados e Como: Adicionar referências a projetos de banco de dados. |
Importante |
---|
Implantação falhará se o seu projeto possui não resolvidas avisos sobre nomes qualificados de banco de dados ou qualificado do servidor e você selecionar o tratar avisos como erros caixa de seleção do Build guia das propriedades do projeto de banco de dados. Esta falha ocorre porque o nomes qualificados de banco de dados ou qualificado do servidor geram avisos. Se você estiver usando nomes qualificados de banco de dados ou qualificado do servidor, você deve limpar o tratar avisos como erros caixa de seleção. |
Desempenho do esquema de banco de dados de importação
Se você importar um esquema de banco de dados enquanto o Editor de lista de teste janela ou Test View janela aberta, levará muito mais tempo para concluir a operação de importação. Essa diminuição ocorrerá no Assistente de novo banco de dados do projeto (se você optou por importar um esquema de banco de dados) e durante a operação de importar o esquema de banco de dados. O problema ocorre mesmo se você fechar o Editor de lista de teste e Test View windows antes de importar o esquema de banco de dados.
Observação |
---|
Para contornar esse problema, você deve fechar o Editor de lista de teste e Test View windows, desligue e reinicie Visual Studioe em seguida, importar o esquema de banco de dados. Para esquemas menores, talvez você não precise executar essas etapas; para o banco de dados de exemplo AdventureWorks, a operação de importação de esquema levou 27 segundos, sem a Editor de lista de teste janela aberta e 48 segundos com o Editor de lista de teste janela aberta. |
Navegação de erros de compilação
Se a distribuição falhar, você não pode corrigir o erro, atualizando o script de construção gerado. Você deve corrigir o arquivo de origem que é usado para gerar o que o script de construção. Se você clicar duas vezes em um erro de implantação do Error List janela, o script de construção é exibido no editor, exibindo a linha que causou o erro.
Observação |
---|
Para contornar esse problema, você deve exibir o script de construção para determinar a causa da falha, mas, em seguida, você deve modificar o arquivo de origem no projeto de banco de dados que contém o erro. Por exemplo, se o script de pós-implantação Script.PostDeployment.sql contém um erro, você deve modificar o Script.PostDeployment.sql em vez do script de construção. |
Ao usar referências de banco de dados entre os erros de sintaxe
Quando você salva uma definição de objeto que contém uma referência a um objeto em outro banco de dados, você poderá receber um ou mais erros de sintaxe. Por exemplo, adicione uma referência ao projeto de banco de dados, defina variáveis que são denominadas RefServer e RefDatabase e atribuir valores a eles. Em seguida, você poderia definir um modo de exibição da seguinte maneira:
CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM $(RefServer).$(RefDatabase).dbo.TableName
Quando você salvar esta definição, você poderá receber uma ou mais mensagens de erro que indicam a sintaxe incorreta. As mensagens de erro podem referenciar o nome do seu banco de dados de validação em tempo de design, o que pode ser confuso.
Observação |
---|
Para resolver esse problema, você deverá colocar os nomes de variável entre colchetes. Para corrigir este exemplo, alterá-lo da seguinte maneira: |
CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].dbo.TableName
Renomeando o SQLCLR projetos e Assemblies
Não será capaz de implantar um projeto de banco de dados que contém uma referência a um projeto do SQLCLR ou assembly, se você renomeá-lo, mas não atualizar a referência.
Observação |
---|
Para corrigir esse problema, remova a referência antiga e adicionar uma referência ao assembly com o nome atualizado ou projeto do SQLCLR. |
Não há suporte para sintaxe STOPLIST de texto completo
Visual Studio Premiummodelo opcional não FROM { [DatabaseName.] SourceStoplistName } | SYSTEM STOPLIST ] sintaxe para o CREATE FULLTEXT STOPLIST instrução. Essa sintaxe é ignorado se você importar um objeto que o utiliza.
Observação |
---|
Para corrigir esse problema, você deve adicionar manualmente stopwords ao seu script pós-implantação. Para obter mais informações, consulte Como: Especificar a pré-implantação ou pós-implantação Scripts. |
Cláusula SORT_IN_TEMPDB não é importada.
Visual Studio Premiumnão é possível importar a cláusula SORT_IN_TEMPDB para índices. Por exemplo, você pode ter o seguinte código:
CREATE TABLE [dbo].[IndexTable]
{
[Column1] [INT] NOT NULL
}
GO
CREATE NONCLUSTERED INDEX [SortInTempDbOn] ON [dbo].[IndexTable]
{
[Column1] ASC
}
WITH (SORT_IN_TEMPDB = ON)
GO
O índice é importado sem a cláusula SORT_IN_TEMPDB.
Observação |
---|
Para corrigir esse problema, você deve corrigir manualmente a definição de índice sempre que você importar as alterações do banco de dados para seu projeto. |
O estado de identificadores entre aspas é perdido quando você importar as funções com valor de tabela que contêm várias instruções
Você pode importar as funções com valor de tabela que contêm várias instruções, mas o estado da seqüência de caracteres de identificador citado não é salva em SQL Server. Quando você importa essas funções, erros podem ser exibidos porque a configuração padrão para identificadores entre aspas está ativado.
Observação |
---|
Para corrigir esse problema, você deve alterar a configuração de identificadores entre aspas para todas as funções com valor de tabela que contêm várias instruções após a importação de objetos e configurações ou depois de escrever as atualizações do banco de dados ao seu projeto. |
Alguns erros de projeto não são limpas depois de recriar o projeto.
Alguns erros que você pode encontrar no seu projeto de banco de dados não desaparecem depois de corrigir a causa do erro, mesmo se você reconstruir seu projeto. Por exemplo, se você excluir o arquivo .sqlpermissions que é referenciado pelo seu projeto usando o Windows Explorer, ocorrerá um erro, conforme o esperado. Se você usar o Solution Explorer para remover o arquivo do seu projeto e compile novamente, o erro permanecerá, mesmo que você o tiver corrigido.
Observação |
---|
Para corrigir esse problema, você deve clicar analisar novamente para criar o projeto na barra de ferramentas, no Solution Explorer. |
Sintaxe incorreta no Script pós-implantação
Por padrão, o modo SQLCMD está desativada no Transact-SQL editor do Visual Studio 2010. Essa alteração foi feita porque o Intellisense não está ativo quando o modo SQLCMD é ativado. Quando você implanta, você pode ver o seguinte erro se você incluiu instruções no script pós-implantação.
Incorrect syntax near ':'. C:\MySandbox\MySolution\MyProject\Scripts\Post-Deployment\Script.PostDeployment.sql
Observação |
---|
Para corrigir esse problema, você deve habilitar o modo SQLCMD. Para habilitar o modo SQLCMD, clique em Modo SQLCMD na Editor do Transact-SQL barra de ferramentas. |
Consulte também
Tarefas
Como: Modificar objetos de banco de dados
Como: Comparar e sincronizar os dados de dois bancos de dados
Conceitos
Renomear todas as referências a um objeto de banco de dados
Renomear todas as referências a um objeto de banco de dados
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Julho de 2010 |
Adicionada uma entrada para avisar aos usuários uma alteração no comportamento padrão no Visual Studio 2010 e pode causar problemas para o seu script de pós-implantação. |
Comentários do cliente. |