【发布时间】:2016-07-01 03:33:03
【问题描述】:
您好,我有一个 SP,我在其中创建了一个临时表来存储一些值。
ALTER PROCEDURE [dbo].[test]
@id int,
@funds_limit money
AS
BEGIN
SET NOCOUNT ON;
DECLARE @threshold money;
CREATE TABLE #ConfigurationTemp
(id int,
name varchar(100) not null,
type varchar(100),
value varchar(100))
INSERT #ConfigurationTemp EXEC get_config @id, 'testType', null
select @threshold = value
from #ConfigurationTemp
where id=@id and name='testLimit'
print @threshold
IF (@funds_limit IS NOT NULL) AND (@threshold < @funds_limit)
BEGIN
DROP TABLE #ConfigurationTemp;
RETURN 1000;
END
select @threshold = value
from #ConfigurationTemp
where id=@id and name='testLimit1'
print @threshold
IF (@funds_limit IS NOT NULL) AND (@threshold < @funds_limit)
BEGIN
DROP TABLE #ConfigurationTemp;
RETURN 1001;
END
END
RETURN 0;
END
临时表有多行。 例如:
1, fund_limit, testType, 10
2, fund_min_limit, testType, 20
我需要首先使用用户输入值(将成为 SP 的输入参数)验证 fund_limit (10) 的值。如果验证失败,我会返回错误代码。如果没有,我去下一次检查。即,fund_min_limit。我对它做同样的事情并返回一个不同的错误代码。如果没有验证失败,我将返回 0,这被认为是成功的。
在这种情况下,我总是得到相同的阈值。即第一行的值... 10.
如何从临时表中获取与名称相关的不同阈值?
【问题讨论】:
-
旁注:临时表在退出创建它们的存储过程时会自动删除。无需手动
DROP TABLE。 -
另外,你怎么知道它只包含一行?它可以轻松地包含多行,但您的
SELECT @scalarvariable = columnvalue语句显然只会为变量分配一行中的一个可能值。 -
我只能猜测,但我会说您传递给您的
get_config存储过程的@id参数可能是问题...? -
嗨 Damien,我尝试将阈值分配给不同的值。但是第二个阈值1 没有任何价值。所以我假设临时表中只有一行。
-
您正在处理此表,因为只有一行。你试过
select * from #ConfigurationTemp吗?它会返回一行吗?
标签: sql sql-server sql-server-2008 temp-tables