2016-10-27 3 views
0

모든 데이터베이스를 반복하고 데이터베이스 당 1 레코드를 표시하는 커서를 만들었습니다.sql 커서가 결과를 테이블에 삽입

내가 볼 수있는 테이블에 레코드를 삽입하고 싶습니다. 쿼리가 변경되어 특정 쿼리에 대한 테이블 구조를 만들고 삽입하고 싶지 않은 이유가있을 수 있습니다. 나는 절 "로 선택"을 사용하고 싶어하지만 커서가

DECLARE @DB_Name varchar(100) 
DECLARE @Command nvarchar(200) 
DECLARE database_cursor CURSOR FOR SELECT name FROM #DBNAME 

OPEN database_cursor 

FETCH NEXT FROM database_cursor INTO @DB_Name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SELECT @Command = 'use [' + @DB_Name + '] Select '''+ @DB_Name + ''' ,'+ 

--Enter query below 
'* from authentication where username like ''%[email protected]%'' and password = ''Rohan2410''' 

-- print @Command 
EXEC sp_executesql @Command 


FETCH NEXT FROM database_cursor INTO @DB_Name 
END 

CLOSE database_cursor 
DEALLOCATE database_cursor 
+1

여기서 무엇을하려고하는지 명확하지 않습니다. 나는 모든 데이터베이스를 살펴볼 부분을 얻었다. 그러나 그 후에 그것은 말이되지 않습니다. select into를 언급했지만 코드에는 포함되어 있지 않습니다. 그리고 진정으로 당신은 이것을위한 커서가 필요 없습니다. 동적 SQL을 다른 방식으로 활용할 수 있습니다. 원하는 결과물을 설명 할 수 있다면 지금 내가 말하는 것을 보여줄 것입니다. –

+0

'Use db'문도 필요 없습니다. tabname을 dbname.dbo.tablename 구문으로 한정하면됩니다. –

+0

Do not Use ** "select into"조항이 자동으로 새 테이블이 만들어 지므로 "select into"절이 자동으로 만들어 지므로 다음 번에 엔진이 생성하려는 테이블 이름 때문에 쿼리가 실패합니다 이미 존재합니다. 임시 테이블에 삽입하여 다른 방법으로 이동 한 다음 커서가 끝난 후 임시 테이블의 데이터를 SELECT INTO를 통해 새 테이블에 삽입합니다. –

답변

1

당신은 더 나은 ... INTO INSERT를 사용한다 실행하는 두 번째에 실패 대신에 SELECT INTO,이 같은의 :

DECLARE @DB_Name varchar(100) 
DECLARE @Command nvarchar(200) 
DECLARE database_cursor CURSOR FOR SELECT name FROM #DBNAME 

OPEN database_cursor 

FETCH NEXT FROM database_cursor INTO @DB_Name 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    SELECT @Command = 'use [' + @DB_Name + '] 

    IF OBJECT_ID(''tempdb..##output'') IS NULL 
     BEGIN 
      SELECT NULL AS DB_Name,* 
      INTO ##output 
      FROM authentication WHERE 1=0 
     END 

    INSERT INTO ##output 
    Select '''+ @DB_Name + ''' ,'+ 

--Enter query below 
'* from authentication where username like ''%[email protected]%'' and password = ''Rohan2410''' 

-- print @Command 
EXEC sp_executesql @Command 


FETCH NEXT FROM database_cursor INTO @DB_Name 
END 

CLOSE database_cursor 
DEALLOCATE database_cursor 

SELECT * FROM ##output 

DROP TABLE ##output 

기본적으로 첫 번째 커서 반복에서 올바른 구조의 빈 임시 테이블을 만듭니다. 그런 다음 그 임시 테이블에 삽입합니다.

관련 문제