2017-05-09 1 views
0

나는 50 개 이상의 열이있는 감사 테이블을 가지고 있으며 하나의 열 값 (열 CreatedDate, GETDATE())을 설정하여 원하는 행 (복제)을 삽입해야합니다. 내가 CreatedDate 열 값을 변경하지 마십시오 경우SQL 기존/중복 행을 표에 삽입하지만 하나의 열 값만 변경합니까?

INSERT INTO Audit_Table (Col1, Col2, .....CreatedDate, ......, Col50, ...ColN) 
SELECT (Col1, Col2, .....GETDATE(), ......, Col50, ...ColN) FROM Audit_Table 
WHERE Audit_Table.Id = Desired_Id 

, 그것은 매우 간단 할 것 : :이 FROM INSERT INTO SELECT *에 의해 달성 될 수 있지만 더 한 50 열이 있기 때문에, 코드가 지저분 해 보일 수있을 것입니다 알고

INSERT INTO Audit_Table SELECT * FROM Audit_Table WHERE Audit_Table.ID = Desired_Id 

행을 복제하고 하나 또는 원하는 열 값만 변경하는 다른 방법이 있습니까?

+0

업, 내가 잊고, 그것은 MSSQL입니다. – basic

+0

명시 적으로 열 이름을 지저분하다고 말하는 것은 고려하지 않을 것입니다. SSMS를 사용하는 경우 개체 탐색기에서 열 노드를 쿼리로 끌어 올 수 있습니다. –

답변

0

아니요. * except column_foo을 SQL로 표현할 방법이 없습니다.

해결 방법은 순서에 열 이름에 대한 데이터베이스의 시스템 카탈로그를 쿼리하여

SELECT 
    col1 
, col2 
, [...] 
, coln 
FROM foo; 

문 (또는 일부)를 생성하는 것입니다. 항상 모든 테이블이있는 테이블과 모든 컬럼이있는 테이블이 있습니다. 그런 다음 필요한 쉼표를 올바른 위치에 놓았는지 확인하십시오 (또는 필요하지 않은 위치에서 제거하거나 OLAP 함수 ROW_NUMBER()을 사용하여 보고서의 모든 행에서 첫 번째 쉼표를 생성하고 쉼표를 1 또는 다른 것을 반환). 마지막으로 CURRENT_DATE 또는 데이터베이스가 현재 날짜로 사용하는 것으로 바꿔 올바른 날짜 열을 편집하십시오.

행운을 빕니다 - 마르코

3

임시 테이블에 레코드를 삽입하고 CreatedDate 열을 GETDATE()로 업데이트 한 다음 Audit_Table에 삽입 할 수 있습니다.

+0

다른 해결책을 추가하기 위해 제 답변을 편집 할 시점에있었습니다. 바로 당신의 것이 었습니다, Marko. 축하해! – marcothesane

0

기존 아이디어를 바탕으로 구축 할 수 있습니다. 수행 시간을 즉

을 그냥 행을 중복 (난 당신이 자동 증가 기본 키 열이, 가정) 한 후 별도의 질의에 갱신이 :

INSERT INTO Audit_Table SELECT * FROM Audit_Table WHERE Audit_Table.ID = Desired_Id 

: 그리고

UPDATE Audit_Table SET CreatedDate = GETDATE() WHERE primaryKeyID = newPrimaryKeyID 

희망이 도움이됩니다!

0
try below as reference 

you can use below statement to copy the all rows, 
mysql> insert into newstudent select * from students; 


you can use below statement to copy the specific row from table, 
mysql> insert into newstudent 
    -> select id, name, age, address 
    -> from students 
    -> where 
    -> id = 1248; 


you can use below statement to copy the either of the row from table, 
    mysql> insert into newstudent 
    -> select id, name, age, address 
    -> from students 
    -> where 
    -> id = 1248 or id=1249; 

use limit clause also along with this 
관련 문제