2014-10-01 41 views
0

我需要根据存储过程中的true或false返回结果,方法是检测包含多个表的视图或不包含多个表。如果view包含多个表,则返回true else false

尝试:

CREATE PROC spTest 
@ViewName nvarchar(max) 

AS 

DECLARE @SQL nvarchar(max) 
DECLARE @TableName nvarchar(max) 


SET @SQL = 'SELECT @TableName = Table_Name 
       FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE 
       WHERE View_Name = ''' + @ViewName + '''' 

EXEC sp_executesql @SQL, N'@TableName nvarchar(max) OUTPUT', @TableName output 

IF (@TableName > 1) 
BEGIN 
    SELECT 'True' 
END 
ELSE 
BEGIN 
    SELECT 'False' 
END 
GO 

注意:我没有得到如何插入从view所有tables@TableName变量,并检查车况。

回答

1
CREATE PROC Sptest @ViewName NVARCHAR(max) 
AS 
DECLARE @cnt INT 

SELECT @cnt = Count(*) 
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE 
WHERE VIEW_NAME = @ViewName 

IF (@cnt > 1) 
    BEGIN 
     SELECT 'True' 
    END 
ELSE 
    BEGIN 
     SELECT 'False' 
    END 
+0

非常感谢。 – Meem 2014-10-01 13:57:03

2

你可以通过这个

create PROC spTest 
@ViewName nvarchar(max) 

AS 

DECLARE @SQL nvarchar(max) 


SET @SQL = ' 
DECLARE @TableName table (table_name varchar(1000)) 
insert into @TableName 
SELECT Table_Name 
       FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE 
       WHERE View_Name = ''' + @ViewName + ''' 


IF (select count(1) from @TableName)> 1 
BEGIN 
    SELECT ''True'' 
END 
ELSE 
BEGIN 
    SELECT ''False'' 
END' 
exec (@SQL) 
GO 

achive你的目标创建过程中执行的程序 spTest 'pace_entity_access_view'

+1

已测试此查询后?它真的有效吗? – 2014-10-01 13:37:20

+0

我没有执行先前的查询,但我做了一些更改,请继续操作。 – user3864233 2014-10-01 13:54:41

+0

@ user3864233,非常感谢。 – Meem 2014-10-01 13:58:43

相关问题