【发布时间】:2013-05-26 02:25:22
【问题描述】:
我创建了一个存储过程,它获取一个人的姓名,将姓名与表中的值匹配,并通过输出变量返回正确的格式。如果名称不在表/数据库中,则存储过程只需输出原始条目。这部分工作正常。
现在我想在同一个存储过程中同时处理名字和姓氏;示例:
- 如果名字匹配,则输出匹配 - 输出变量
- 如果姓氏匹配,则发送匹配 - 输出变量
- 如果两个名称匹配,则通过不同的输出变量发送两者的匹配项。
我很难过,因为我不知道如何处理这两个名称,并获得两者或一个,或另一个:
我可以做单独的程序,但这不明智。
表名是:(StringFormat)
存储过程:
CREATE PROCEDURE [dbo].[uspFormat]
@FName VARCHAR(30),
@FNameMatchedValue VARCHAR(30) OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @ValueMatched VARCHAR(30)
SELECT @ValueMatched = StringValue
FROM StringFormat WHERE MatchedValue = @FName;
IF @ValueMatched IS NOT NULL
BEGIN
SET
@FNameMatchedValue = @ValueMatched
END
RETURN 0
END
感谢收看:
更新:请查看我的解决方案:
好的,发布后我回去修改了我之前做错的代码: 它正在工作,但即使一个名称匹配也会返回唯一值。但是我不确定这是最好的方法:
另一个变化:我只是使用了两个 virables 来获得匹配而不是一个:
@FirstNameMatched 和 @LastNameMatched
修改后的代码:
CREATE PROCEDURE [dbo].[uspFormat]
@FName VARCHAR(30),
@LName VARCHAR(30),
@FNameMatchedValue VARCHAR(30) OUTPUT,
@LNameMatchedValue VARCHAR(30) OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @FirstNameMatched VARCHAR(30)
DECLARE @LastNameMatched VARCHAR(30)
SELECT @FirstNameMatched = StringValue
FROM StringFormat WHERE MatchedValue = @FName;
IF @FirstNameMatched IS NOT NULL
BEGIN
SET
@FNameMatchedValue = @FirstNameMatched
END
ELSE
BEGIN
SET @FNameMatchedValue = @FName
END
BEGIN
SELECT @LastNameMatched = StringValue
FROM StringFormat WHERE MatchedValue = @LName;
IF @LastNameMatched IS NOT NULL
BEGIN
SET
@LNameMatchedValue = @LastNameMatched
END
ELSE
BEGIN
SET @LNameMatchedValue = @LName
END
END
RETURN 0
END
【问题讨论】:
-
您为什么不简单地使用
select @FNameMatchedValue = StringValue from StringFormat where MatchedValue = @FName; select @LNameMatchedValue = StringValue from StringFormat where MatchedValue = @LName;并收工?当然,您似乎知道匹配的行永远不会超过一个。 -
我之前确实尝试过这种方式,如果一个名称匹配,则两个名称的值相同。甚至上面的代码也为两者返回相同的值。也许我需要不同的匹配变量。
标签: sql sql-server tsql