referência não resolvida ao objeto [INFORMATION_SCHEMA]. [TABLES]

99

Eu criei uma UDF que acessa a [INFORMATION_SCHEMA].[TABLES]visualização:

CREATE FUNCTION [dbo].[CountTables]
(
    @name sysname
)
RETURNS INT
AS
BEGIN
    RETURN
    (
        SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @name
    );
END

No Visual Studio, o esquema e o nome da visualização são marcados com um aviso:

SQL71502: Função: [dbo]. [CountTables] tem uma referência não resolvida ao objeto [INFORMATION_SCHEMA]. [TABLES].

Ainda posso publicar o projeto de banco de dados sem problemas e o UDF parece funcionar corretamente. O IntelliSense preenche o nome do modo de exibição para mim, portanto, não parece haver problemas com ele.

Eu também tentei alterar a implementação para usar em sys.objectsvez desta visualização, mas recebi o mesmo aviso para esta visualização também.

Como posso resolver esse aviso?

Sam
fonte

Respostas:

180

Adicione uma referência de banco de dados a master:

  1. No projeto, clique com o botão direito em Referências .
  2. Select referência Add banco de dados ... .
  3. Selecione Banco de dados do sistema .
  4. Certifique-se de que o mestre esteja selecionado.
  5. Pressione OK .

Observe que a atualização do VS pode demorar um pouco.

Sam
fonte
6
E apenas um aviso - se alguém tiver aqueles SSDT instalados em um caminho diferente, você pode ter problemas. Encontramos isso em nosso último projeto em que alguns tinham um drive E: e outros apenas um drive C :. Copiamos esse arquivo de referência e o colocamos em um local compartilhado para que pudéssemos fazer referência por meio de. \ SharedSchemas \ master.dacpac. Isso provavelmente está resolvido agora, mas era um problema na primeira versão.
Peter Schott
Peter Schott tem razão aqui. Geralmente, é uma boa ideia copiar os arquivos dacpac referenciados em algum lugar dentro da solução e usar a partir daí.
Veysel Ozdemir
1
Para mim, diz "Uma referência a este banco de dados do sistema já existe em seu projeto." Estou preso agora!
orad
1
Só para a próxima pessoa economizar um pouco de sanidade - acredite ou nem mesmo sair do VS não foi o suficiente para que isso funcionasse - eu tive que reiniciar e então a configuração começou a funcionar. Você também pode abrir as Opções do Visual Studio ... Ferramentas do SQL Server ... Edição online ... habilitar "Resolver referências a visualizações do sistema e objetos de banco de dados mestre".
NYCdotNet
Estou tendo o mesmo problema no Visual Studio 2017 e não vejo "Referência do banco de dados" na lista de referências
Scarl
3

No nosso projeto, já temos uma referência para master, mas tivemos esse problema. Aqui estava o erro que obtivemos:

SQL71502: Procedure: [Schema].[StoredProc1] has an unresolved reference to object [Schema].[Table1].[Property1].

Para resolver o erro de referência, no arquivo sql da tabela, clique com o botão direito em propriedades e verifique se o BuildSettings está definido como Build.

Alterar a compilação corrigiu isso.

Russell D
fonte
2

o que Sam disse é a melhor maneira de fazer isso.
No entanto, se você tiver um cenário em que precisa implantar o dacpac de uma máquina que não tem essa referência naquele local específico, você pode ter problemas. Outra maneira é abrir seu arquivo .project e certificar-se de que a tag a seguir tenha o valor de falsepara a configuração de construção que você está tentando executar.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

Dessa forma, você não precisa adicionar uma referência ao seu projeto.

Tecfield
fonte
13
Este deve ser o último recurso, porque você perde feedback sobre erros de sql!
Jowen,