두 개의 다른 데이터베이스에 두 개의 테이블이 있습니다.
내 첫 번째 테이블은 이전 버전이며 두 번째 테이블보다 열이 적습니다.
이전 테이블의 내용을 새 테이블에 복사하고 싶습니다.
이 경우 각 데이터베이스 테이블에는 여러 배포가 있습니다.
각 테이블에 대해 열 이름을 수동으로 쓰지 않고도 이전 테이블에서 새 테이블로 데이터를 빠르게 복사하려면 어떻게해야합니까?
감사!
다음 코드가 작업을 수행해야합니다. 기본적으로하는 일은 다음과 같습니다.
1. 두 테이블에서 열 이름을 수집합니다.
2. 하나의 테이블에만 존재하는 열을 필터링하기 위해 열 이름을 교차합니다.
3. 쉼표로 구분 된 열 이름 인 문자열을 가져옵니다.
4. 3 단계의 문자열을 사용하여 삽입 명령을 만듭니다.
5. 4 단계에서 명령을 실행합니다.
--BEGIN TRAN
DECLARE @oldName NVARCHAR(50) = 'OldTableName', @newName NVARCHAR(50) = 'newTableName'
DECLARE @oldDBName NVARCHAR(50) = '[OldDBName].[dbo].['+@oldName+']', @newDBName NVARCHAR(50) = '[newDBName].[dbo].['+@newName+']'
/*This table variable will have columns that exists in both table*/
DECLARE @tCommonColumns TABLE(
ColumnsName NVARCHAR(max) NOT NULL
);
INSERT INTO @tCommonColumns
SELECT column_name --,*
FROM information_schema.columns
WHERE table_name = @oldName
AND COLUMNPROPERTY(object_id(@oldName), column_name, 'IsIdentity') = 0 --this will make sure you ommit IDentity columns
INTERSECT
SELECT column_name --, *
FROM information_schema.columns
WHERE table_name = @newName
AND COLUMNPROPERTY(object_id(@newName), column_name,'IsIdentity') = 0--this will make sure you ommit IDentity columns
--SELECT * FROM @tCommonColumns
/*Get the columns as a comma seperated string */
DECLARE @columns NVARCHAR(max)
SELECT DISTINCT
@columns = STUFF((SELECT ', ' + cols.ColumnsName
FROM @tCommonColumns cols
FOR XML Path('')),1,1,'')
FROM @tCommonColumns
PRINT @columns
/*Create tyhe insert command*/
DECLARE @InserCmd NVARCHAR(max)
SET @InserCmd =
'INSERT INTO '+@newDBName +' ('+@columns +')
SELECT '+@columns +' FROM '+@oldDBName
PRINT @InserCmd
/*Execute the command*/
EXECUTE sp_executesql @InserCmd
--ROLLBACK
이 스크립트 는 이전 테이블에는 충족되었지만 새 테이블에는없는 FOREIGN KEY 제약 조건 이 있는 경우 실패 할 수 있습니다 .
편집 : 열
을 생략하도록 쿼리가 업데이트되었습니다 Identity
.
편집 2 :
테이블에 대해 서로 다른 데이터베이스를 지원하는 업데이트 쿼리 (당신이 설정된하게 @oldName
, @newName
, @oldDBName
, @newDBName
변수는 실제 자격 증명과 일치).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다