선언 된 변수에 따라 여러 서버 중 하나의 데이터로 임시 테이블을 채우는 데 동적 SQL을 사용하려고합니다. 원본 데이터에는 미래에 더 많은 열이 추가 될 수 있으므로 명시 적으로 정의 할 필요없이 현재 존재하는 열을 기반으로 대상 임시 테이블을 만들 수 있어야합니다.select into를 사용하여 즉시 테이블 만들기
Select top 1 * into #tempTable from MyTable
Delete from #tempTable
또는 : 나는 사용하여 적절한 열이 빈 테이블을 만들려고
Select * into #tempTable from MyTable where 1 = 0
모두 빈 테이블을 작성했다,하지만 난 다음에 삽입하려고 할 때 :
01 :declare @sql varchar(max) = 'Select * from '
+ case when @server = '1' then 'Server1.' else 'Server2.' end
+ 'database.dbo.MyTable'
Insert into #tempTable
exec(@sql)
나는이 오류
Msg 213, Level 16, State 7, Line 1 Column name or number of supplied values does not match table definition.
exec(@sql)
은 단독으로 작동합니다. 두 단계 모두 동일한 서버에서 동일한 테이블을 사용하는 경우에도이 오류가 발생합니다. 수정이 가능합니까? 아니면 create table
으로 테이블을 명시 적으로 정의해야합니까? 선수 컬럼 임시 테이블의 열 ID
(Int, Identity)
장착
는 당신이 연결하는 사용자가있는 테이블 "myTable에"를 가지고 있는가 년대 서버 1 또는 서버 2에 비해 구조적으로 다른 스키마? – xQbert
아니요. 'select into'와 'into into'둘 모두에서 동일한 서버 및 테이블을 사용하여이 작업을 시도했으며 비교할 #tempTable 및 MyTable에서 선택했습니다. 그들은 동일하게 보입니다. – APH
삽입과 임용을 결합 할 수 없다고 생각했습니다. 그것들은 모두 동적 인 SQL이거나 전혀 존재하지 않아야합니다. 'exec ('#tempTable'+ @sql) '에 삽입하십시오. – xQbert