【发布时间】:2015-09-22 17:51:08
【问题描述】:
我正在尝试在 SQL Server Management Studio 中创建一个存储过程,我可以在其中找到属于具有特定状态的特定供应商的表中的任何发票。例如,我的 VB 应用程序中有供应商 123456,我想在我的 InvoiceTable 中查找他们是否有状态 = B 的发票,并返回 true 或 false 值。这是我迄今为止一直在尝试的:
ALTER PROCEDURE [dbo].[CheckStatus]
@VendorNumber char
AS
BEGIN
Select distinct
CASE WHEN OrderStatus = 'B' and VendorNumber = @VendorNumber then 'true' else 'False' END as Status
from InvoiceTable
END
现在它总是返回一个单数的“False”值,不管 orderstatus = B 和 vendornumber = @vendornumber 与否。
我不确定这是否可能,或者我什至在正确的页面上
【问题讨论】:
-
您的查询为表中的所有记录构建一个“真”或“假”列表,然后将
distincts 发送到'true','false'。显然“假”恰好在第一行,而您的应用从不读取第二行。 -
我会将你的 case 子句移到 where 子句中,从中选择 count,如果你的结果 > 0,那么你知道你有发票。您的 distinct 可能总是会返回 2 行:“True”和“False”,而且可能恰好是 false 是第一个
-
@MikeDavis 我的超能力告诉我你的
= @VendorNumber永远不会是真的,因为你是declared it aschar。 -
@GSerg 我声明它与我的表中的数据类型相同
-
我很确定您在@MikeDavis 表中有类似
char(50)的内容。
标签: sql-server sql-server-2008 stored-procedures vb6 ssms