Я пытаюсь найти в базе данных значения в представлениях.
Я застрял в приведенной ниже ошибке.
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 Стивен, Продажи
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.
Я не уверен, почему я получаю эту ошибку.Я чувствую, что я справляюсь с ними.Любой вклад по этому вопросу будет полезен.
Спасибо.