27,579
社区成员
发帖
与我相关
我的任务
分享
create PROC PROC_Validate_VIEW
AS
CREATE TABLE #TB(Tablename NVARCHAR(100))
DECLARE @Tablename NVARCHAR(100),@SQL NVARCHAR(200)
DECLARE CUR CURSOR FOR
SELECT NAME FROM SYSOBJECTS WHERE (XTYPE = 'V') ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR INTO @Tablename
WHILE 1=1
BEGIN
IF(@@FETCH_STATUS<>0)BREAK;
SET @SQL = 'SELECT TOP 1 * into #temp FROM [' + @Tablename +']'
EXEC(@SQL)
IF(@@ERROR<>0)
BEGIN
INSERT INTO #TB
SELECT @Tablename--记录有错误的视图
END
ELSE
BEGIN--没有错的就删除临时表
DELETE FROM #temp--这里报错 临时表不存在 应该怎么写呢
END
FETCH NEXT FROM CUR INTO @Tablename
END
CLOSE CUR
DEALLOCATE CUR
SELECT * FROM #TB
DROP TABLE #TB
--如果系统是SQL2005以上的,建议用这个过程:
ALTER PROC PROC_Validate_VIEW
AS
SET NOCOUNT ON
CREATE TABLE #TB
(
Tablename NVARCHAR(100)
)
DECLARE @Tablename NVARCHAR(100), @SQL NVARCHAR(200)
DECLARE CUR CURSOR FOR
SELECT NAME FROM SYSOBJECTS
WHERE (XTYPE='V')
ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR INTO @Tablename
WHILE @@FETCH_STATUS=0
BEGIN
BEGIN TRY
SET @SQL = 'SELECT TOP 0 * into #t FROM ['+@Tablename+']'
EXEC (@SQL)
END TRY
BEGIN CATCH
INSERT INTO #TB SELECT @Tablename--记录有错误的视图
END CATCH
FETCH NEXT FROM CUR INTO @Tablename
END
CLOSE CUR
DEALLOCATE CUR
SELECT * FROM #TB
SET NOCOUNT OFF
GO
EXEC PROC_Validate_VIEW
CREATE PROC PROC_Validate_VIEW
AS
CREATE TABLE #TB
(
Tablename NVARCHAR(100)
)
DECLARE @Tablename NVARCHAR(100), @SQL NVARCHAR(200)
DECLARE CUR CURSOR FOR
SELECT NAME
FROM SYSOBJECTS
WHERE (XTYPE='V')
ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR INTO @Tablename
WHILE @@FETCH_STATUS=0
BEGIN
SET @SQL = 'SELECT TOP 1 * into #temp FROM ['+@Tablename+']'
EXEC (@SQL)
IF (@@ERROR<>0)
BEGIN
INSERT INTO #TB
SELECT @Tablename--记录有错误的视图
END
FETCH NEXT FROM CUR INTO @Tablename
END
CLOSE CUR
DEALLOCATE CUR
SELECT *
FROM #TB
DROP TABLE #TB
GO
不需要再删除#temp,局部临时表在EXEC后会自动消失的。
create PROC PROC_Validate_VIEW
AS
CREATE TABLE #TB(Tablename NVARCHAR(100))
DECLARE @Tablename NVARCHAR(100),@SQL NVARCHAR(200)
DECLARE CUR CURSOR FOR SELECT NAME FROM SYSOBJECTS WHERE (XTYPE = 'V') ORDER BY NAME
OPEN CUR
FETCH NEXT FROM CUR INTO @Tablename
WHILE(@@FETCH_STATUS=0)
BEGIN
SET @SQL = 'SELECT TOP 1 * into ##temp FROM [' + @Tablename +']'
EXEC(@SQL)
IF(@@ERROR<>0)
BEGIN
INSERT INTO #TB SELECT @Tablename
END
ELSE
BEGIN
DELETE FROM ##temp--可以换成全局临时表
END
FETCH NEXT FROM CUR INTO @Tablename
END
CLOSE CUR
DEALLOCATE CUR
SELECT * FROM #TB
go