2016-06-06 1 views
0

런타임에 이름이 정의 된 테이블에서 데이터를 가져와야하므로 전역으로 데이터를 먼저 선택하는 방법을 사용하고 있습니다. 임시 테이블 및 내 실제 임시 테이블에. 하지만 열 이름 또는 제공된 값 수가 표 정의와 일치하지 않습니다. A는 select into 문으로 열을 일치 시키려하는 이유를 얻지 못합니다. 내 코드 :SQL Server 2008 열 이름 또는 제공된 값 수가 테이블 정의와 일치하지 않습니다.

IF OBJECT_ID('tempdb.dbo.#tempData') IS NOT NULL 
     DROP TABLE #tempData 
    if object_id('tempdb..##temptbl') is not null 
    begin 
     drop table ##temptbl 
    end 

    execute('select * INTO ##temptbl from Repo.dbo.'[email protected]) 

    select * INTO #tempData from ##temptbl 

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

당신은 확실히 그 변수 (@tablename)를 선언하고 있습니까? 나는 여기 당신의 코드에서 그것을 볼 수 없습니다. –

+0

예, 이것은 매우 큰 절차의 일부입니다. 실행 비트에서 실행 예외가 발생합니다. – AnishaJain

+0

코드 단편은 별도로 실행하면 자체적으로 실행됩니다. –

답변

0

첫 번째 IF 문에서 시작 ... 끝내는 것처럼 보입니다. 이것은 글로벌 temp 테이블의 삭제가 여전히 첫 번째 부분에서 계속되고 있으므로 실패 할 가능성이 높습니다. 쿼리 아래

IF OBJECT_ID('tempdb.dbo.#tempData') IS NOT NULL 
BEGIN 
    DROP TABLE #tempData 
END 
GO 
IF object_id('tempdb..##temptbl') IS NOT NULL 
BEGIN 
    DROP TABLE ##temptbl 
END 

EXECUTE('select * INTO ##temptbl from Repo.dbo.'[email protected]) 

SELECT * INTO #tempData FROM ##temptbl 
+0

'BEGIN..END'은 하나의 명령문 만 IF 명령문에 의존하는 경우에는 필요하지 않습니다. –

+0

'DROP TABLE #tempData'는 위의 IF에 종속되지 않습니까? –

+0

네,하지만 그것에 의존하는 유일한 진술입니다. 'BEGIN..END' 블록에 오직 하나의 명령문 만 있다면,'BEGIN..END'은 불필요합니다. –

0
  simpe use this 





    declare @tableName nvarchar(50) = 'tblTest' 

      IF OBJECT_ID('tempdb.dbo.#tempData') IS NOT NULL 
        DROP TABLE #tempData 

      IF OBJECT_ID(N'tempdb..##temptbl') IS NOT NULL 
      BEGIN 
       DROP TABLE ##temptbl 
      END 

      execute('select * INTO ##temptbl from dbo.'+ @tableName) 

      select * from ##temptbl 
0

이 문제를 해결할 수 있습니다 -

declare @tableName varchar(50) = 'Test' 

IF OBJECT_ID('tempdb.dbo.#tempData') IS NOT NULL 
DROP TABLE #tempData 
IF OBJECT_ID('tempdb.dbo.##temptbl') IS NOT NULL 
DROP TABLE ##temptbl 

execute('select * INTO ##temptbl from dbo.'[email protected]) 

select * INTO #tempData from ##temptbl 
관련 문제