0

나는 T-SQL에 새로 온 사람하고 또한이부문 삽입 저장 프로 시저 T-SQL은

CREATE PROCEDURE [SISACT].[new_activo_fijo] 
    @activo VARCHAR(8) , 
    @descripcion VARCHAR(60) , 
    @utiliza_serial BIT, 
    *@serial VARCHAR(20) = NULL,* 
    @fecha_adquisicion DATE, 
    @referencia VARCHAR(10), 
    @costo_adquisicion FLOAT, 
    @vida_util INT, 
    **@saldo_a_depreciar FLOAT = @costo_adquisicion/@vida_util,** 
    @ultimo_periodo CHAR(6), 
    *@periodo_saldo_cero CHAR(6) = NULL,* 
    @fecha_incorporacion DATE, 
    @fecha_desincorporacion DATE, 
    @proveedor VARCHAR(8), 
    @situacion INT 
AS 
INSERT INTO [SISACT].[ACTIVOS_FIJOS] (
activo, descripcion, utiliza_serial, serial, fecha_adquisicion, 
referencia, costo_adquisicion, vida_util, saldo_a_depreciar, 
ultimo_periodo, periodo_saldo_cero, fecha_incorporacion, 
fecha_desincorporacion, proveedor, situacion 
) 
VALUES(
    @activo, @descripcion, @utiliza_serial, @serial, @fecha_adquisicion, 
    @referencia, @costo_adquisicion, @vida_util, @saldo_a_depreciar, 
    @ultimo_periodo, @periodo_saldo_cero, @fecha_incorporacion, 
    @fecha_desincorporacion, @proveedor, @situacion 
) 

같은 일을 할 수 있는지 궁금,이 같은 NULL에 매개 변수를 초기화 할 수 있습니다 내부 나는 형식에서 어떤 것도 보내지 않을 경우를 대비하여 또는 매개 변수를 전송할 때해야합니까?

정말 기본적인 것을 묻는다면 미안하지만 도움을 주시면 감사하겠습니다.

그냥 경우에, 나는 당신은 확실히 기본적으로 NULL로 개별 매개 변수를 초기화 할 수 있습니다 PHP와 ODBC

답변

2

는 실험을 바탕으로, 여기에 내가 무엇을 발견 :

  1. 당신은이 작업을 수행 할 수 있습니다 @saldo_a_depreciar FLOAT = @costo_adquisicion/@vida_util. 답변 : 아니요, SQL Server (내 경우 2012)는 Incorrect syntax near '/'이라고 말합니다. 그것을 괄호 안에 감싸는 것 (절망적 인 것의 최후의 수단 :-)도 도움이되지 않았다.

  2. @periodo_saldo_cero CHAR(6) = NULL 할 수 있습니까? 답변 : 이고 @periodo_saldo_cero이 전달되지 않으면 기본적으로 NULL이됩니다. 당신의 @saldo_a_depreciar 열의로

은 : 항상 @costo_adquisicion/@vida_util으로 정의된다? 그렇다면 저장하는 대신 필요에 따라 계산해야합니다. 정말 저장보다는 계산해야 값입니다 @saldo_a_depreciar 경우

, 당신은 단지 매개 변수 목록이 아닌 프로 시저 코드로 계산을 밀어해야합니다

CREATE PROCEDURE [SISACT].[new_activo_fijo] 
    @activo VARCHAR(8) , 
    @descripcion VARCHAR(60) , 
    @utiliza_serial BIT, 
    @serial VARCHAR(20) = NULL, 
    @fecha_adquisicion DATE, 
    @referencia VARCHAR(10), 
    @costo_adquisicion FLOAT, 
    @vida_util INT, 
    @saldo_a_depreciar FLOAT = NULL 
    @ultimo_periodo CHAR(6), 
    @periodo_saldo_cero CHAR(6) = NULL, 
    @fecha_incorporacion DATE, 
    @fecha_desincorporacion DATE, 
    @proveedor VARCHAR(8), 
    @situacion INT 
AS 
    IF @saldo_a_depreciar IS NULL SET @saldo_a_depreciar = @costo_adquisicion/@vida_util 
    INSERT INTO ... (and the rest of your procedure) 

이 두 경우에 @saldo_a_depreciar을 계산합니다 : (1) 매개 변수를 전달하지 않은 경우 및 (2) 매개 변수를 null로 전달한 경우.

1

을 사용하고 있습니다 -하지만 난 당신이 당신의 매개 변수 목록에서이 작업을 수행 할 수 있다고 생각하지 않습니다.

내가 할 것 다음 값이 @saldo_a_depreciar을 위해 전달되는

  • 경우 - 다음 첫 번째로 계산을 - NULL@saldo_a_depreciar을 위해 전달되는 경우
  • 같이 그럼 그냥 그 값을 사용

    CREATE PROCEDURE [SISACT].[new_activo_fijo] 
        @activo VARCHAR(8) , 
        @descripcion VARCHAR(60) , 
        @utiliza_serial BIT, 
        @serial VARCHAR(20) = NULL, 
        @fecha_adquisicion DATE, 
        @referencia VARCHAR(10), 
        @costo_adquisicion FLOAT, 
        @vida_util INT, 
        @saldo_a_depreciar FLOAT = NULL, 
        @ultimo_periodo CHAR(6), 
        @periodo_saldo_cero CHAR(6) = NULL, 
        @fecha_incorporacion DATE, 
        @fecha_desincorporacion DATE, 
        @proveedor VARCHAR(8), 
        @situacion INT 
    AS 
        IF @saldo_a_depreciar IS NULL 
         SET @saldo_a_depreciar = @costo_adquisicion/@vida_util 
    
        INSERT INTO [SISACT].[ACTIVOS_FIJOS] (
         activo, descripcion, utiliza_serial, serial, fecha_adquisicion, 
         referencia, costo_adquisicion, vida_util, saldo_a_depreciar, 
         ultimo_periodo, periodo_saldo_cero, fecha_incorporacion, 
         fecha_desincorporacion, proveedor, situacion) 
        VALUES(
         @activo, @descripcion, @utiliza_serial, @serial, @fecha_adquisicion, 
         @referencia, @costo_adquisicion, @vida_util, @saldo_a_depreciar, 
         @ultimo_periodo, @periodo_saldo_cero, @fecha_incorporacion, 
         @fecha_desincorporacion, @proveedor, @situacion) 
    
    0 : 저장 프로 시저의 명령은

그래서 같은 코드 뭔가를 써서

1

MS SQL Server는 저장 프로 시저의 기본값을 지원하지만 @saldo_a_depreciar의 계산을 "AS"다음의 프로 시저 코드로 이동해야합니다.

DECLARE @saldo_a_depreciar FLOAT; 
SET @saldo_a_depreciar = @costo_adquisicion/@vida_util;