下面是存储过程的代码。SQL存储过程无法正常工作
该代码的第一部分按照预期工作。它接受变量,将INSERT插入到一个表中,然后使用从该操作创建的主键在另一个表上执行另一个INSERT。
然而,不会发生的是if/else if/else块中的代码朝向结束。基本上应该检查以确保两个ID列匹配正确。如果不是,则将列调整为适当的值,然后返回旧值加上输入者的日期和用户名(lastChangeOperator)。
我已经花了整整一天的时间写这个和这个程序的另一部分,所以我希望第二组眼睛能够做到这一点。
ALTER PROCEDURE [dbo].[sp_AgentIdAprCheck]
(
@companyCode char(3),
@agentId char(10),
@firstName nvarChar(50),
@lastname nvarChar(50),
@suffix char(10),
@ssn int,
@taxIdType char(1),
@entityType char(1),
@corporateName nvarChar(100),
@currentUniqueId int OUTPUT,
@currentAgentId int OUTPUT,
@operator nvarchar(50) OUTPUT,
@date datetime OUTPUT
)
AS
DECLARE @rows int = 0
DECLARE @uniqueAgentId int = 0
DECLARE @lastChangeOperator char(6) = 'LVOMQ1'
DECLARE @LastChangeDate datetime
--DECLARE @currentUniqueId int = 0
--DECLARE @currentAgent int = 0
--DECLARE @operator nvarchar(50)
--DECLARE @date datetime
SELECT @rows = COUNT(AgentTaxId)
FROM AgentIdentification
WHERE AgentTaxId = @ssn
if @rows > 0
return 1
else
BEGIN TRANSACTION
SET @LastChangeDate = GETDATE()
INSERT INTO Agent (EntityType, FirstName, LastName,
NameSuffix, CorporateName, LastChangeOperator, LastChangeDate)
VALUES (@entityType, @firstName, @lastname,
'', @corporateName, @lastChangeOperator, @LastChangeDate)
SELECT @uniqueAgentId = @@IDENTITY
SELECT UniqueAgentId
FROM Agent
INSERT INTO AgentIdentification (UniqueAgentId, TaxIdType,
AgentTaxId, LastChangeOperator, LastChangeDate)
VALUES (@uniqueAgentId, @taxIdType, @ssn, @
lastChangeOperator, @lastChangeDate)
DECLARE @uniqueIdRows int = 0
SELECT @uniqueIdRows = COUNT(UniqueAgentId)
FROM UniqueAgentIdToAgentId
WHERE UniqueAgentId = @uniqueAgentId
DECLARE @agentIdRows int = 0
SELECT @agentIdRows = COUNT(AgentId)
FROM UniqueAgentIdToAgentId
WHERE AgentId = @agentId
if @uniqueIdRows = 0 AND @agentIdRows = 0
BEGIN
INSERT INTO UniqueAgentIdToAgentId (UniqueAgentId, AgentId,
CompanyCode, LastChangeOperator, LastChangeDate)
VALUES (@uniqueAgentId, @agentId, @companyCode,
@lastChangeOperator, @LastChangeDate)
END
else if @agentIdRows = 0
BEGIN
SELECT @currentUniqueId = UniqueAgentId,
@operator = LastChangeOperator, @date = @LastChangeDate
FROM UniqueAgentIdToAgentId
UPDATE UniqueAgentIdToAgentId
SET UniqueAgentId = @uniqueAgentId
WHERE AgentId = @agentId AND UniqueAgentId = @currentUniqueId
END
else
BEGIN
SELECT @currentAgentId = AgentId,
@operator = LastChangeOperator, @date = @LastChangeDate
FROM UniqueAgentIdToAgentId
UPDATE UniqueAgentIdToAgentId
SET AgentId = @agentId
WHERE UniqueAgentId = @uniqueAgentId --AND AgentId = @currentAgentId
return 2
END
COMMIT TRANSACTION
因此IF/ELSE IF/ELSE没有运行?默认情况下,ELSE不会总是运行?你也有一个选择语句和输出参数。你如何处理返回的数据?最后,你是否已经逐步确定'uniqueIdRows'和'agentIdRows'变量是否按预期填充? – CoderMarkus 2012-08-17 00:26:25