La solution d'Adrian Iftode est bonne, mais échoue si certaines vues ne sont pas associées au schéma par défaut. Ce qui suit est une version révisée de sa solution qui prend schéma en compte, tout en fournissant des informations d'erreur sur chaque vue à l'échec (testé sur SQL Server 2012):
DECLARE @stmt NVARCHAR(MAX) = '';
DECLARE @vw_schema NVARCHAR(255);
DECLARE @vw_name NVARCHAR(255);
CREATE TABLE #badViews
(
[schema] NVARCHAR(255)
, name NVARCHAR(255)
, error NVARCHAR(MAX)
);
CREATE TABLE #nullData
(
null_data VARCHAR(1)
);
DECLARE tbl_cursor CURSOR FORWARD_ONLY READ_ONLY
FOR
SELECT
SCHEMA_NAME(schema_id) AS [schema]
, name
FROM
sys.objects
WHERE
[type] = 'v';
OPEN tbl_cursor;
FETCH NEXT FROM tbl_cursor INTO @vw_schema, @vw_name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @stmt = CONCAT(N'SELECT TOP 1 NULL FROM ', @vw_schema, N'.', @vw_name);
BEGIN TRY
-- silently execute the "select from view" query
INSERT INTO #nullData EXECUTE sp_executesql @stmt;
END TRY
BEGIN CATCH
INSERT INTO #badViews ([schema], name, error)
VALUES (@vw_schema, @vw_name, ERROR_MESSAGE());
END CATCH
FETCH NEXT FROM tbl_cursor INTO @vw_schema, @vw_name;
END
CLOSE tbl_cursor;
DEALLOCATE tbl_cursor;
-- print the views with errors when executed
SELECT * FROM #badViews;
DROP TABLE #badViews;
DROP TABLE #nullData;
double possible de [Trouver des objets cassés dans SQL Server] (https://stackoverflow.com/questions/2330521/find-broken-objects-in-sql-server) – devinbost