2017-12-10 40 views
0

ORG_TOOLS 테이블에 ToolIds의 목록과 각 고유 한 OrgId의 상태 값 목록이 있습니다. 저장 프로 시저 sp_ORG_ORGANIZATIONS_CreateDefaultTools은 기본값을 OrgId = 0에서 새로 지정한 OrgId으로 복사합니다. 그것은이 과정에 상관없이 기본 상태 값이 무엇인지, 새로 OrgId 지정에 대한 ToolIds 항상 코드가 답을 제공 1.테이블 만들기 오류 - 테이블 만들기 기본적으로 오류가 있습니다

CREATE TABLE [dbo].[ORG_TOOLS] 
(
    [OrgId] [int] NOT NULL, 
    [ToolId] [int] NOT NULL, 
    [Status] [bit] NOT NULL 
     CONSTRAINT [DF_ORG_TOOLS_Status] DEFAULT ((1)) 
) 


CREATE PROCEDURE dbo.sp_ORG_ORGANIZATIONS_CreateDefaultTools 
    @OrgId INT 
AS 
    SET NOCOUNT ON 

    INSERT INTO ORG_TOOLS (OrgId, ToolId)  
     (SELECT @OrgId, ToolId 
     FROM ORG_TOOLS 
     WHERE OrgId = 0) 
GO 
+1

사이드 노트에 대한 새로운 라인이 있어야합니다. 당신은 **하지 **은'sp_'를 사용한다 저장 프로 시저의 접두사. Microsoft는 [자체 저장을 위해이 접두어를 예약했습니다 (* 저장 프로 시저 명명 * 참조)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) 및 당신은 미래에 언젠가 이름 충돌의 위험을 감수해야합니다. [저장 프로 시저 성능에 좋지 않습니다.] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). 'sp_'를 피하고 다른 것을 접두어로 사용하는 것이 가장 좋습니다. –

+0

코드는 사용자가 말하는 것과 정확히 일치합니다. 새 행을 삽입하고 OrgId 및 TooId 열을 설정합니다. Status 값은 기본 제약 조건 또는 트리거에서 가져옵니다. 상태가 1로 설정되어 있다고 불평하지만, ** 정확히 ** 귀하의 코드가하는 것입니다 (완전한 예라고 가정). 아무도 당신의 마음을 읽을 수 없습니다 - 당신의 목표가 다른 가치 (다른 옵션이 하나뿐입니다)를 설정하는 것이라면, 그것을 성취 할 방법을 결정해야합니다. 기본 제약 조건을 변경하거나 저장 프로 시저를 변경하십시오. – SMor

답변

0

의 상태가 없음을 지적하고있다 - 당신은 기본을 설정하는 필드 1에 대해, 그리고 저장 프로 시저에서이 값을 무시하지는 않습니다. 다른 값이 저장해야 할 경우에 그 값을 전달해야합니다 당신은 또한 INSERT

INSERT INTO ORG_TOOLS (
    OrgID, 
    ToolID, 
    Status 
) 
(SELECT 
    @OrgId, 
    ToolId, 
    [[insert some status value here - perhaps you want a case statement or something, but you have to provide some value to override the default]] 
FROM 
    ORG_TOOLS 
WHERE 
    OrgId = 0)