2014-01-06 2 views
0

AdventureWorks2012 데이터베이스에서 SQL Server를 사용하고 있습니다. 나는 방아쇠로 일하고있다. 내가 삽입 한 행을 AuditTable이라는 다른 테이블의 하나의 단일 열에 복사하려고합니다. 기본적으로 parson.address 테이블에 삽입 할 때마다 모든 행을 AuditTable.prevValue 열에 복사하고 싶습니다. 나는 등을 삽입하는 방법을 알고, 나는 하나의 열에 쓰는 방법을 모르겠다.SQL Server 2012. 행을 다른 테이블의 단일 열로 복사

다음은 일반적인 개념입니다.

USE [AdventureWorks2012] 

ALTER TRIGGER [Person].[sPerson] ON [Person].[Address] 


FOR INSERT AS INSERT INTO AdventureWorks2012.HumanResources.AuditTable(PrevValue) select 
AddressID,AddressLine1,AddressLine2,City, StateProvinceID, PostalCode, SpatialLocation, rowguid, ModifiedDate FROM Inserted 

ERROR: The select list for the INSERT statement contains more items than the insert list. The number of SELECT values must match the number of INSERT columns.

어떤 도움을 주셔서 감사합니다. 로드를 검색했지만 어디서나 정확한 솔루션을 찾을 수 없습니다.

답변

2

오류 메시지가 말하는대로 - 다른 유형의 열 9 개를 단일 열에 삽입 할 수 없습니다. 목적지 AuditTable.PrevValue 열이 NVARCHAR()이라고 가정하면, 당신은 n 개의 * 숯불에 비 문자 열을 열을 연결하고 변환하여, 다음과 같이 삽입을 평평하게 수 :

INSERT INTO AdventureWorks2012.HumanResources.AuditTable(PrevValue) 
SELECT 
    N'ID : ' + CAST(AddressID AS NVARCHAR(20)) + N'Address: ' + AddressLine1 + 
    N', ' +AddressLine2 + .... 
FROM Inserted 

는 IMO 같은 하나의 긴 문자열을 유지하는 감사 테이블을 만든다 검색하기가 어려우므로 SourceTable 및 가능한 경우 Source PK 열을 추가하는 것이 좋습니다.

는 또한 다음과 같이 XML C 럼으로 XML로하여 행을 변환 및 저장 고려할 수 :

여기
create table Audit 
(
    AuditXml xml 
); 

alter trigger [Person].[sPerson] ON [Person].[Address] for INSERT AS 
begin 
    DECLARE @xml XML; 
    SET @xml = 
    (
     SELECT * 
     FROM INSERTED 
     FOR XML PATH('Inserted') 
    ); 
    insert into [MyAuditTable](AuditXml) VALUES (@xml); 
end 
+0

2. 내가 완료 한 것입니다. INSERT INSERT INSERT INSERT INSERT INTO AdventureWorks2012.HumanResources.AuditTable (PrevValue) SELECT N'ID : '+ CAST (AddressID AS NVARCHAR (20)) + N'Address :'+ AddressLine1 + N ','+ AddressLine2 + City + CAST (StateProvinceID AS NVARCHAR (20)) + CAST (PostalCode AS NVARCHAR (20)) + CAST (SpatialLocation AS NVARCHAR (200)) + CAST (rowguid AS NVARCHAR (100)) + CAST (수정 된 날짜 AS NVARCHAR (40)) FROM 삽입 됨. 나는 이것이 올바르게되어야한다고 생각하지만, 기둥 중 하나는 지형 유형입니다. –

+0

테이블을 nvarchar (300)로 설정하고 모두 char로 변환했지만 문제는 "문자열을 uniqueidentifier로 변환 할 때 변환이 실패했습니다."입니다. 아주 많이 감사합니다. –

관련 문제