SQL 存在的问题

Posted

技术标签:

【中文标题】SQL 存在的问题【英文标题】:Problems with SQL EXISTS 【发布时间】:2012-06-18 13:04:48 【问题描述】:

我要疯了。我有以下 SP:

ALTER PROCEDURE [BankImport].[spBI_getIsBatchUnique]
    @batchName varchar = 500
AS
BEGIN
    SET NOCOUNT ON;
    IF (EXISTS (SELECT 1 FROM [ACN_Main].[BankImport].[tblBI_Jobs]
            WHERE [batchNumber] = @batchName))
        BEGIN
            SELECT 1
        END
    ELSE
        BEGIN
            SELECT 0
        END     
    END
GO

但无论请求是什么,我总是返回 0!

我尝试了多种方式修改它,但没有成功! 我需要做的是检查是否有该批号的记录并返回true,否则返回false。

有什么建议吗?

谢谢

【问题讨论】:

【参考方案1】:

你的输入参数看起来有点搞笑

@batchName varchar = 500

应该是这样吗?

@batchName varchar(500)

即设置 varchar 数据类型的长度,你当前的长度,500 是batchName 参数的默认值。

【讨论】:

+1 目前它为varchar(1) 提供默认值500,它会自动截断为*。这不可能是想要的效果! 你在哪里对!!!!多么怀念啊!!!我在上面浪费了两个小时,以不同的方式重写了 10 次查询!谢谢! @MaiOM 总是用长度定义 char/varchar/nchar/nvarchar。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/…【参考方案2】:

我想因为你比较batchNumber和batchName,试试

EXISTS (SELECT 1 FROM [ACN_Main].[BankImport].[tblBI_Jobs]
        WHERE [batchName] = @batchName)

【讨论】:

这只是命名匹配。我解决了,检查@mouters 的答案。还是谢谢

以上是关于SQL 存在的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于如何使用存在和不存在的 PL/SQL 查询的问题

SQL 查询存在且不存在

SQL - 如果不存在

SQL 存在的问题

SQL IF 存在还是 WHERE 存在?

Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server不存在或访问被拒绝