2011-08-02 4 views
0

테이블이 있지만 그 열 ("id (Uniqueidentifier) ​​열"이 있음을 알고 있습니다)을 모릅니다.열 이름을 알 수없는 테이블을 업데이트하십시오.

나는 다음과 같은 쿼리 테이블의 모든 열을 얻을 수 있습니다 :

DECLARE @columnNames NVARCHAR(4000) = '' 

    SELECT @columnNames += '[' + COLUMN_NAME + '] ' 
    FROM INFORMATION_SCHEMA.Columns 
    WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME NOT IN ('id') 
    ORDER BY COLUMN_NAME 

지금은 다른 레코드의 데이터를 하나 개의 레코드를 업데이트 할 ...

내가 어떻게 할 수 있습니까?

덕분에 모든 ...

+3

사용하려는 테이블의 열 이름을 모르면 정말 나쁜 생각이며 아마도 잘못된 디자인 때문일 수 있습니다. – Jacob

+0

나는 동의한다, 그러나 테이블은 다른 고객에서 동적으로 창조된다 ... 나는 그것이 2 개의 테이블 하나 및 필드 이름 등등을 가진 다른 것으로 창조되었다는 것을 바랐다 ... 그러나 나는이 빠른 것을 취급해야했다 – ogun

+1

당신은 어떻게 알는지 어느 열 이 값과 다른 값을 연관시키는 방법 및 방법입니다. –

답변

1

이것은 동적 SQL 빌드

DECLARE @columnNames NVARCHAR(4000) 
DECLARE @idfrom int, @idto int 
DECLARE @table nvarchar(50) 
SET @table = 'MY_TABLE' 
SET @idfrom = 5 -- id you are copying from 
SET @idto = 2 -- id you are copying to 

DECLARE @sqlstring nvarchar(max) 

SELECT @columnNames = coalesce(@columnNames, 'SET ') + '[' + COLUMN_NAME + ']=t2.' + '[' + COLUMN_NAME + '],' 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = @table AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

SET @sqlstring = 'update t1 ' +stuff(@columnNames, len(@columnNames),1,'') + ' 
FROM @t t1 
join @t t2 on t1.id =' + cast(@idto as varchar) + ' 
and t2.id = ' + cast(@idfrom as varchar) 

EXEC(@sqlstring) 
+0

감사합니다. 정말 도움이됩니다. – ogun

0

나는 당신이 "... 표 삽입 표 2에서 .. 선택"유형 삽입 문자열을 만든 다음 sp_executesql을 함께 실행할 수 있다고 생각합니다.

DECLARE @insertColumnNames NVARCHAR(4000) = '' 
DECLARE @selectColumnNames NVARCHAR(4000) = '' 

SELECT @insertcolumnNames += ',' + '[' + COLUMN_NAME + '] ' 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'TABLE_1' AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

SELECT @selectcolumnNames += ',' + '[' + COLUMN_NAME + '] ' 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'TABLE_2' AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

sp_executesql ('insert into TABLE_1 ('[email protected]+') select '+ @selectcolumnNames +' from TABLE_2'); 

나는 이와 비슷한 일이 작동 할 수 있다고 생각 (당신이 열 문자열에서 여분을 제거해야합니다 이것은 전혀 단지 아이디어를 테스트하지하는 경우) 당신이 할 수있는

+0

좋은 생각이지만 기존 데이터를 업데이트하고 싶습니다 ... insert 문을 사용하면 기존 데이터를 삭제해야합니다 ... – ogun

+0

더 어려울 수 있지만 대신 업데이트 문자열을 만들 수 있습니다. 비슷한 방법으로 삽입합니다. –

관련 문제