Sql 使用不同类型的数据存储过程

Sql 使用不同类型的数据存储过程,sql,stored-procedures,Sql,Stored Procedures,首先,大家好,我被我的商店程序卡住了。让我告诉你我想要什么,并显示我的代码。我有一个配置器表,其中包含IdType、TransactionType和Value。我有七种不同的事务类型,它们是C、G、T、A、X、S、M。我的值和IdType列来自过程中的UI。我只想为每个IdType添加这七种类型的表。如果有,则更新它 以下是我创建的存储过程: ALTER PROCEDURE [dbo].[spConfTypeTransaction] ( @IdType INT, @Value I

首先,大家好,我被我的商店程序卡住了。让我告诉你我想要什么,并显示我的代码。我有一个配置器表,其中包含IdType、TransactionType和Value。我有七种不同的事务类型,它们是C、G、T、A、X、S、M。我的值和IdType列来自过程中的UI。我只想为每个IdType添加这七种类型的表。如果有,则更新它

以下是我创建的存储过程:

ALTER PROCEDURE [dbo].[spConfTypeTransaction]
(
    @IdType INT,
    @Value INT,
    @TransactionType CHAR(1)
)
AS 
BEGIN
   DECLARE @CType CHAR
   SET  @CType = 'C'
   DECLARE @GType CHAR
   SET  @GType = 'G'
   DECLARE @TType CHAR
   SET  @TType = 'T'
   DECLARE @AType CHAR
   SET  @AType = 'A'
   DECLARE @XType CHAR
   SET  @XType = 'X'
   DECLARE @SType CHAR
   SET  @SType = 'S'
   DECLARE @MType CHAR
   SET  @MType = 'M'

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @CType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @GType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @TType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @AType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @XType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @SType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @MType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType
END

我不知道这个过程如何写得更简单。您能帮助我吗?

如果我没有弄错,这可能是您的解决方案:

ALTER PROCEDURE [dbo].[spConfTypeTransaction]
(
    @IdType INT,
    @Value INT,
    @TransactionType CHAR(1)
)
AS 
BEGIN
IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType IN ('C', 'G', 'T', 'A', 'X', 'S', 'M')) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

如果我没有弄错,这可能是您的解决方案:

ALTER PROCEDURE [dbo].[spConfTypeTransaction]
(
    @IdType INT,
    @Value INT,
    @TransactionType CHAR(1)
)
AS 
BEGIN
IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType IN ('C', 'G', 'T', 'A', 'X', 'S', 'M')) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@CType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType

如果
@TransactionType
始终等于
@*Type
,并且由于所有
插入/更新
语句似乎都执行相同的操作,那么您所需要的就是:

ALTER PROCEDURE [dbo].[spConfTypeTransaction]
(
    @IdType INT,
    @Value INT,
    @TransactionType CHAR(1)
)
AS 
BEGIN   

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @TransactionType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@TransactionType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType
END

如果
@TransactionType
始终等于
@*Type
,并且由于所有
插入/更新
语句似乎都执行相同的操作,那么您所需要的就是:

ALTER PROCEDURE [dbo].[spConfTypeTransaction]
(
    @IdType INT,
    @Value INT,
    @TransactionType CHAR(1)
)
AS 
BEGIN   

IF(SELECT COUNT(*) FROM StockConfigurator where IdType = @IdType and Value = @Value and TransactionType = @TransactionType) = 0
    INSERT INTO StockConfigurator
          (IdType, Value,TransactionType)
    VALUES
          (@IdType, @Value,@TransactionType)
ELSE
    UPDATE StockConfigurator
    SET IdType = @IdType,
        Value = @Value,
        TransactionType = @TransactionType
END

首先谢谢你。那么我有一个问题,我是否也必须编写declare部分?@Cugureleuro当您需要使用局部变量时,您只需要一个
declare
块。如果您需要的所有变量值都作为参数输入,那么答案是否定的。好的,我认为事务类型必须是局部变量,因为只有IdType和Value作为参数输入。首先,谢谢。那么我有一个问题,我是否也必须编写declare部分?@Cugureleuro当您需要使用局部变量时,您只需要一个
declare
块。如果您需要的所有变量值都作为参数输入,那么答案是否定的。好的,我认为事务类型必须是局部变量,因为只有IdType和Value作为参数输入。