아래 코드는 내 코드이지만 현재 궁극적 인 목표는 데이터베이스의 모든 텍스트와 유사한 필드를 확인하고 특정 조건 및 필요한 경우 수정.SQL Server (Transact)의 외부 커서에서 변수에 액세스하는 데 어려움이 있음
저는이쪽으로 나아갔습니다. 실제로 열의 값을 검색하려고 시도 할 때까지 모든 것이 괜찮 았습니다.
set @CurrentValue
할 때 문제가 발생합니다. top 1
코드는 나중에 코드를 확장 할 때까지 일시적이지만 문제는 아닙니다. 이 테스트에서 나는 @TableName
을 내부 루프 while
루프에서 만들 때 오류가 있다는 것을 발견했습니다.
Must declare the table variable "@TableName".
저는 절차 적 Transact SQL의 전문가는 아닙니다. 이 위치에서이 변수에 액세스 할 수있는 방법이 있습니까?
--Edit following config lines as necessary
USE mytable
DECLARE @SchemaName SYSNAME = 'dbo'
DECLARE @TableName SYSNAME
DECLARE TableCursor CURSOR FOR
SELECT t.name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE s.name = @SchemaName
and lower(t.name) like 'online%';
OPEN TableCursor
FETCH NEXT FROM TableCursor
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '-----'
PRINT @TableName
PRINT '-----'
DECLARE MatchingColumns CURSOR LOCAL FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = @TableName
AND
DATA_TYPE in ('nvarchar', 'varchar', 'ntext', 'text', 'nchar', 'char');
DECLARE @ColumnName NVARCHAR(MAX)
OPEN MatchingColumns
FETCH NEXT FROM MatchingColumns
INTO @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @CurrentValue NVARCHAR(MAX)
set @CurrentValue = (
select top 1 @ColumnName
from @TableName
)
PRINT @ColumnName
FETCH NEXT FROM MatchingColumns
INTO @ColumnName
END
CLOSE MatchingColumns
DEALLOCATE MatchingColumns
FETCH NEXT FROM TableCursor
INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
의 가능한 복제 https://stackoverflow.com/questions/2838490/table-name-as- ON
바꾸기 변수) - 실제로 플래그가 너무 늦었습니다.하지만 인용문에 대해 경고하기 때문에이 태그가 더 마음에 들었습니다. [변수가있는 선택 쿼리에서 SQL Server 테이블 이름을 사용하려면 어떻게합니까?] (https://stackoverflow.com/questions/10521144/how-do-i-use-sql-server-table-in-select-que ry-with-a-variable) –