2015-01-29 2 views
1

SQL Server DB 프로젝트 게시 작업을 통해 DB에 필드를 채우는 경우 매우 이상한 문제가 나타납니다. SQL Server DB 프로젝트 게시 빈 문자열에 0이 삽입되었습니다.

내가 INSERT 스크립트가 수동으로 모든 작품을 잘 실행하는 경우이 인구 스크립트

set identity_insert CatalogueItemExtensionFields on 

INSERT INTO CatalogueItemExtensionFields (rowid, fieldtype, description, nullable, defaultvalue, active_flag, orderpriority) 
VALUES (dbo.ConstantProductGroupRowId(), 3, 'Product Group', 0, '', 1, dbo.ConstantProductGroupRowId()), 

set identity_insert CatalogueItemExtensionFields off 

있는 테이블 정의

CREATE TABLE [dbo].[CatalogueItemExtensionFields] 
(
    [RowID] tinyint identity not null, 
    [FieldType] tinyint not null, 
    [Description] varchar(120) not null, 
    [Nullable] bit not null, 
    [DefaultValue] varchar(100) null, 
    [Active_Flag] bit null, 
    [OrderPriority] tinyint not null, 
    [ContextGuid] uniqueidentifier not null 
); 

입니다. DB 프로젝트 게시의 일부로 실행하면 "0"이 삽입됩니다.

나는 생성 된 publish.sql 스크립트를 살펴 봤지만 모두 괜찮아 보입니다.

현재로서는 찾을 수있는 유일한 유사한 게시물은 this이지만 우리가 삽입하려는 필드가 varchar로 정의되어 있기 때문에 우리 사례에는 해당되지 않습니다.

이것은 우리를 미치게합니다. 어떤 아이디어?

+0

삽입 0 어디? 거기에 8 개의 열이 있습니다. 이 스크립트는 SQLCMD 모드에서 실행됩니다 믿습니다. 따라서 SSMS를 SQLCMD 모드로 설정하고 동일한 작업을 수행하는지 확인하십시오 ('0'삽입). 제대로 작동하면 어떻게됩니까? 'dbo.ConstantProductGroupRowId()'는 사용자 정의 스칼라 함수입니까? 그것은 어떻게 생겼습니까? –

+0

그냥 명확히하기 위해 "defaultvalue"열에 빈 문자열을 삽입하려고합니다. – maurocam

+0

@NickMcDermaid, 우리는 방금 SQLCMD 모드에서 게시 스크립트를 실행하고 유효한 문자열을 쓰려고 할 때이 오류가 발생했습니다. '메시지 245, 수준 16, 상태 1, 줄 7 varchar 값'test '를 데이터로 변환 할 때 변환하지 못했습니다. int를 입력하십시오. ' 이것은 SQLCMD가 필드가 INT라고 생각하지만 테이블 정의에 나타나는 방식이 아님을 의미합니다. SQLCMD 모드에서 사용되는 모호한 DB 설정이 있습니까? – maurocam

답변

0

APOLOGIES - MY MISTAKE !!! (하지만 매우 유용 하나가를 문서화하는)

내가 아래에 다시 정리 한

테이블 정의 (또한 내 최초의 게시물에 명확 존경을 만들기 위해)

CREATE TABLE [dbo].[CatalogueItemExtensionFields] 
(
[RowID] tinyint identity not null, 
[FieldType] tinyint not null, 
[Description] varchar(120) not null, 
[Nullable] bit not null, 
[DefaultValue] varchar(100) null, 
[Active_Flag] bit null, 
[OrderPriority] tinyint not null 
); 

INSERT 문

set identity_insert CatalogueItemExtensionFields on 

INSERT INTO CatalogueItemExtensionFields (rowid, fieldtype, description, nullable, defaultvalue, active_flag, orderpriority) VALUES 
(6, 3, N'Product Group', 0, N'', 1, 6), 
(7, 2, N'Minimum Order Quantity', 1, NULL, 1, 7), 
(8, 3, N'Additional HIBCs', 0, 1, 1, 8), 
(9, 3, N'Additional GTINs', 0, N'', 1, 9) 

set identity_insert CatalogueItemExtensionFields off 

여러 행을 삽입하기 때문에 SQL 문을 구문 분석 할 때 숫자 defaul을 삽입하려고합니다. RowID = 8의 경우 tvalue = 1입니다. 결과적으로 열이 varchar로 정의되어 있어도 SQL은 INSERT 문에 INT가 삽입되도록 결정합니다. 따라서 빈 문자열 값 (RowID 7 및 9)은 0으로 변환됩니다. 나는 동일한 문제가있는 actual INT column과 관련된 게시물을 언급했습니다.

대신 RowID = 8에 대해 '1'의 기본값을 사용하여 다음 명령문을 실행하면 정상적으로 작동합니다.

INSERT INTO CatalogueItemExtensionFields (rowid, fieldtype, description, nullable, defaultvalue, active_flag, orderpriority) VALUES 
(6, 3, N'Product Group', 0, N'', 1, 6), 
(7, 2, N'Minimum Order Quantity', 1, NULL, 1, 7), 
(8, 3, N'Additional HIBCs', 0, '1', 1, 8), 
(9, 3, N'Additional GTINs', 0, N'', 1, 9) 

이제 SQL Server는 열 유형 정의를 무시하고 대신 내 INSERT 문의 값에서 유형을 결정합니까?

관련 문제