2016-08-09 5 views
4

임시 테이블 Product이있는 SQL Server 2016 데이터베이스를 만들었습니다. 링크 된 테이블을 통해 Access 데이터베이스에서 테이블을 업데이트하고 싶습니다.Access에서 SQL Server 2016 임시 테이블을 업데이트 할 수 있습니까?

CREATE TABLE [dbo].[Product] 
(
    [Product] [uniqueidentifier] NOT NULL, 
    CONSTRAINT PK_Product_Product PRIMARY KEY CLUSTERED (Product), 
    [Name] [nchar](50) NOT NULL, 
    CONSTRAINT [AK_Product_Name] UNIQUE([Product line], [Name]), 
    [Status] [uniqueidentifier] NOT NULL, 
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, 
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL, 
    PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)  
) ON [PRIMARY] WITH  
    ( 
     SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ProductHistory) 
    ) 
GO 

쿼리 : 테이블은 다음과 같이 정의된다

이 오류에 대한 오류 메시지가 없습니다 :이 작업을 수행 할 때, 액세스

예약 오류 (-7776)을보고

UPDATE Product 
SET Status = (SELECT [Product status] 
       FROM [Product status] 
       WHERE [Name] = 'Announced') 
WHERE [Name] = 'A300'; 

은 오류없이 성공하며 액세스 테이블에 표시됩니다. 업데이트가 기록 테이블에 올바르게 반영됩니다.

백엔드 변경으로 인해 문제가 발생하지만 효과가없는 경우 유효한 시간 열을 숨기려고했습니다. ProductProduct status 테이블에는 최소한의 데이터 만 포함됩니다.

작동시키기위한 특정 방법이 있습니까? 아니면이 시나리오가 지원되지 않습니까?

+1

임시 테이블에 대한 ODBC 링크가 SQL Server 용 최신 ODBC 드라이버를 사용합니까? –

+0

문제가되는 열없이이 테이블에서보기를 만들 수 있으며 Access에서 해당 테이블을 링크하고 거기에있는 레코드를 업데이트하려고 할 수 있습니다. – Andre

+0

@Gord SQL Server 2016의 새 설치와 함께 설치된 'SQL Server 기본 클라이언트 RDA 11.0.'을 사용합니다. – Pekka

답변

2

datetime2(7) 열의 기본 정밀도가 Access에서 사용할 수있는 정밀도를 초과합니다. 정밀도가 datetime2(3)으로 줄어들면 쿼리가 업데이트 가능해집니다.

초 단위로 표시 할 수있는 숫자가 2 자리를 약간 넘기 때문에 너무 높을 수 있습니다. 테이블을 링크 할 때, 효과적인 표현이 컬럼을 표현하기에 충분하지 않다는 메세지는보고되지 않습니다. 다음 업데이트 이전 행의 값을 보여줍니다 어디

SQL Server 프로파일 러에서 다음 업데이트

가 유효한 시간 필드

exec sp_executesql N'UPDATE "dbo"."Product" 
    SET "Product status"[email protected] 
    WHERE "Product line" = @P2 AND "Product" = @P3 AND 
     "Name" = @P4 AND "Product status" = @P5 AND "SysStartTime" = @P6 AND 
     "SysEndTime" = @P7', 
    N'@P1 uniqueidentifier,@P2 uniqueidentifier,@P3 uniqueidentifier,@P4 nvarchar(50),@P5 uniqueidentifier,@P6 datetime2,@P7 datetime2', 
    '3C...1E4B','38...2883','8E...0387',N'A300','44...6B76','2016-08-09 21:43:07.8710000','2016-08-09 22:45:59.1340000' 

의 값 문제를 보여줍니다 -하는 다음 때문에 부족 정밀 실패 액세스 열의.

Product line Product Name Product status SysStartTime    SysEndTime 
38...2883 8E...0387 A300 44...6B76  2016-08-09 21:43:07.8709730 2016-08-09 22:45:59.1342223 

이것은 Rows showing as #DELETED에 BIGINT 열에 범위의 문제에 관한 것이다. 최신 SQL Server 유형을 포괄적으로 매핑하면 도움이됩니다.

GUID는 출력을 더 읽기 쉽게하기 위해 부분적으로 생략되었습니다.

+1

이 생성 된 UPDATE sql은 WHERE 절에 모든 열을 넣는 이상한 버전입니다. 연결된 테이블의 테이블 디자인을 열 때 Access에서 기본 키를 인식합니까? – Andre

+0

@Andre 예, 기본 키가 올바르게 감지되었습니다.업데이트의 정확성을 확인하기 위해 [[ODBC 테이블이 연결된 #Deleted] 오류] (https://support.microsoft.com/en-us/kb/128809) 대체와 유사합니다. – Pekka

관련 문제