【发布时间】:2012-02-21 05:30:44
【问题描述】:
我正在尝试通过视图搜索数据库值。
我陷入了以下错误。
USE AdventureWorks
GO
--EXEC Customer.sp_FindInViews Stephen, Sales
ALTER PROCEDURE Customer.sp_FindInViews @stringToFind VARCHAR(100), @schema sysname
AS
SET NOCOUNT ON
DECLARE
@ViewName AS nVarChar(128)
, @TmpQuery AS nVarChar(500)
, @Out3 as int
, @sqlCommand VARCHAR(8000)
, @where VARCHAR(8000)
, @columnName sysname
, @cursor VARCHAR(8000)
DECLARE Outer_Cursor CURSOR FOR
SELECT schema_name(schema_id)+'.'+name as "View_Name",schema_id FROM [sys].[all_views]
where schema_id in (@schema)
OPEN Cur_Views
FETCH NEXT FROM Cur_Views INTO @ViewName
WHILE @@Fetch_Status = 0
BEGIN
SET @sqlCommand = 'SELECT * FROM ' + @ViewName + ' WHERE'
SET @where = ''
DECLARE col_cursor CURSOR FOR
SELECT syscolumns.name FROM sys.sysobjects "sysobjects"
INNER JOIN sys.syscolumns "syscolumns"
on syscolumns.id = sysobjects.id
WHERE (sysobjects.type = 'V' and SCHEMA_NAME(sysobjects.uid) + '.' +sysobjects.name = @ViewName)
OPEN col_cursor
FETCH NEXT FROM col_cursor INTO @columnName
WHILE @@FETCH_STATUS = 0
BEGIN
IF @where <> ''
SET @where = @where + ' OR'
---------------------------------------------------------------------------
SET @where = @where + ' ' + @columnName + ' LIKE ''' + @stringToFind + ''''
SET @sqlCommand = @sqlCommand + @where
CREATE TABLE #Data (var varchar)
SELECT @TmpQuery = @sqlCommand
INSERT #Data exec (@TmpQuery)
SELECT @Out3 = var from #Data
PRINT @Out3
DROP TABLE #Data
FETCH NEXT FROM col_cursor INTO @columnName
END
CLOSE col_cursor
DEALLOCATE col_cursor
CLOSE Outer_Cursor
DEALLOCATE Outer_Cursor
END
GO
代码可以编译,但执行时会报错,如下所示: EXEC Customer.sp_FindInViews Stephen,销售
Msg 16915, Level 16, State 1, Procedure sp_FindInViews, Line 19
A cursor with the name 'Outer_Cursor' already exists.
Msg 16905, Level 16, State 1, Procedure sp_FindInViews, Line 22
The cursor is already open.
Msg 16924, Level 16, State 1, Procedure sp_FindInViews, Line 23
Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.
我不确定,为什么会出现此错误。我觉得我正在处理它们。对此的任何意见都会有所帮助。
谢谢。
【问题讨论】:
-
我有没有提到我多么讨厌游标?!? :)
标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2