referencia no resuelta al objeto [INFORMATION_SCHEMA]. [TABLES]

99

Creé una UDF que accede a la [INFORMATION_SCHEMA].[TABLES]vista:

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

En Visual Studio, el esquema y el nombre de la vista están marcados con una advertencia:

SQL71502: Función: [dbo]. [CountTables] tiene una referencia sin resolver al objeto [INFORMATION_SCHEMA]. [TABLES].

Todavía puedo publicar el proyecto de la base de datos sin ningún problema, y ​​la UDF parece funcionar correctamente. IntelliSense rellena el nombre de la vista por mí, por lo que no parece tener ningún problema con ella.

También intenté cambiar la implementación para usar en sys.objectslugar de esta vista, pero también recibí la misma advertencia para esta vista.

¿Cómo puedo resolver esta advertencia?

Sam
fuente

Respuestas:

180

Agregue una referencia de base de datos a master:

  1. En el proyecto, haga clic con el botón derecho en Referencias .
  2. Seleccione referencia Añadir base de datos ... .
  3. Seleccione Base de datos del sistema .
  4. Asegúrese de que el maestro esté seleccionado.
  5. Presione OK .

Tenga en cuenta que VS puede tardar un poco en actualizarse.

Sam
fuente
6
Y solo una advertencia: si alguien tiene esos SSDT instalados en una ruta diferente, es posible que tenga problemas. Nos encontramos con eso en nuestro último proyecto, donde algunos tenían un disco E: y otros solo un disco C :. Copiamos ese archivo de referencia y lo colocamos en una ubicación compartida para poder hacer referencia a él a través de. \ SharedSchemas \ master.dacpac. Eso probablemente esté resuelto ahora, pero fue un problema en la primera versión.
Peter Schott
Peter Schott tiene un punto aquí. En general, es una buena idea copiar los archivos dacpac referenciados en algún lugar dentro de la solución y usarlos desde allí.
Veysel Ozdemir
1
Para mí, dice "Ya existe una referencia a esta base de datos del sistema en su proyecto". ¡Estoy atascado ahora!
orad
1
Solo para que la siguiente persona ahorrara algo de cordura, lo crea o ni siquiera salir de VS no fue suficiente para que esto se mantuviera, tuve que reiniciar y luego la configuración comenzó a funcionar. También puede abrir las Opciones de Visual Studio ... Herramientas de SQL Server ... Edición en línea ... habilitar "Resolver referencias a vistas del sistema y objetos de base de datos maestra".
NYCdotNet
Tengo el mismo problema en Visual Studio 2017 y no veo "Referencia de base de datos" en la lista de referencias
Scarl
3

En nuestro proyecto, ya tenemos una referencia al maestro, pero tuvimos este problema. Aquí estaba el error que obtuvimos:

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

Para resolver el error de referencia, en el archivo sql de la tabla, haga clic con el botón derecho en las propiedades y verifique que BuildSettings esté configurado en Build.

Cambiarlo lo arregló.

Russell D
fuente
2

lo que dijo Sam es la mejor manera de hacer esto.
Sin embargo, si tiene un escenario en el que necesita implementar el dacpac desde una máquina que no tiene esa referencia en esa ubicación específica, puede tener problemas. Otra forma es abrir su archivo .project y asegurarse de que la siguiente etiqueta tenga el valor de falsepara la configuración de compilación que está intentando ejecutar.

<TreatTSqlWarningsAsErrors>false</TreatTSqlWarningsAsErrors>

De esta manera, no es necesario que agregue una referencia a su proyecto.

tecfield
fuente
13
¡Este debería ser un último recurso, porque pierde comentarios sobre los errores de SQL!
Jowen