2010-01-05 5 views
0

테이블에는 113 개의 열이 있습니다. 테이블에 두 개의 기본 레코드가 있습니다. 하나는 알 수없는 레코드이고 다른 하나는 적용 할 수없는 레코드입니다. 따라서 각 열에는 알 수없고 적용 할 수없는 고유 한 기본값이 있습니다.커서로 문장 삽입

나는 두 레코드를 가져 오기 위해 일반 insert 문을 쓰고 싶지 않습니다.

그래서 커서를 사용하여 각 열을 삽입하려고했습니다.

은 INFORMATION_SCHEMA.COLUMNS에서 해당 테이블의 열 이름을 얻었다과 문 "을 선택 삽입"을 사용하여 다른 위치에 정확한 테이블에서 값을 삽입하려고하지만 우리는 INFORMATION_SCHEMA에서 얻을 컬럼의 이름

Declare @col_name varchar(50) 

declare my_cur CURSOR for 
    select column_name from information_schema.columns 
    where table_name = 'tabl' and table_catalog = 'db' 
    and table_schema = 'dbo' 


    Fetch next from my_cur 
    into @col_name 

    while @@FETCH_STATUS = 0 
    BEGIN 

    Insert into db.dbo.tabl (***@col_name***) 
    select ***@col_name*** from openrowset('sqlncli', 'server=my_server;   trusted_connection=yes;', db.dbo.tabl) 



    fetch next from my_cur into @col_name 
    end 

close my_cur 
deallocate my_cur 
go 

하지만, 내가 @col_name 오히려 개체 (열)

보다, 문자열로 취급 될 것을 몰랐어요,이 경우 또는 대체 솔루션에 대한 주위의 모든 작업이있다.

+5

데이터베이스 디자인을 프론트 데스크의 비서에게 맡겼습니까? – ChaosPandion

+0

테이블은 데이터웨어 하우스의 차원 테이블입니다. 따라서 불평 할 수 없습니다. –

+1

"테이블에는 113 개의 칼럼이 있습니다."... 나는 그곳에서 멈춰서고, 다른 사람들의 조언을 따르고, 디자인을 재고해야한다고 생각합니다. – Tesserex

답변

1

당신은 동적 SQL과 INSERT 문을 생성해야하고 그것이

Declare @InsertStatement VarChar (Max) 

SET @InsertStatement = '' 

SET @InsertStatement = @InsertStatement + ' Insert into db.dbo.tabl (' + @col_name + ') ' 
SET @InsertStatement = @InsertStatement + ' select ' + @col_name + ' from openrowset(''sqlncli'', ''server=my_server''; ' 

Exec Sp_SQLExec @InsertStatement 
5

내가 채워 이러한 기본값을 점점 문제의 이상이라고 생각 실행됩니다.

나는 이것 좀 봐 복용 좋을 것 : Fundamentals of Relational Database Design

을 그리고 당신은 여전히이 작업을 수행하려는 경우, 연결된 서버에서 모든 기본값을 검색하기 위해 더 나은 임시 테이블에 배치 할 수 그런 다음 information_schema.columns에 조인하여 테이블을 채 웁니다. 데이터를 조율하여 작동하도록해야 할 것입니다.

+2

그래, 관련이없는 값을 가진 113 개의 컬럼이 약간의 힌트가 있다는 강한 힌트가있다. – ErikE

+0

개발자들에게 그들의 디자인을 재고 해달라고 분명히 말할 것이다. 그러나 나중에 데이터웨어 하우스의 차원 테이블임을 알고 싶습니다. –

+0

아, 그건 좀 바뀔 수 있어요. 그러나 제안 된 테이블 구조는 어떻게 생겼습니까? 당신이 올린 커서가 113 행을주고, 각각 하나의 열 (113 개 중)이 채워진 것처럼 보입니다. 어떻게하면 이것을 더 유용한 구조로 변형시킬 계획입니까? – AlexCuse