Sql 使用不同类型的数据存储过程
首先,大家好,我被我的商店程序卡住了。让我告诉你我想要什么,并显示我的代码。我有一个配置器表,其中包含IdType、TransactionType和Value。我有七种不同的事务类型,它们是C、G、T、A、X、S、M。我的值和IdType列来自过程中的UI。我只想为每个IdType添加这七种类型的表。如果有,则更新它 以下是我创建的存储过程: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
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作为参数输入。