1

我正在维护各种 VB6 项目,其中一些查询被传递到具有“ELSE:”的服务器,并在 case 语句中使用冒号。

我想知道有人能告诉我 **ll 冒号是做什么用的吗?它会在 SQL2005 和更高版本中导致错误,但 SQL2000 可以正常工作。

我想将它从代码中删除并重新编译,但我担心它会破坏应用程序中的其他 10 件事..

提前致谢...

4

3 回答 3

4

这是交易..有人在您的代码中使用 ELSE 关键字作为 LABEL。

TSQL 中的一个单词后跟一个冒号是一个标签。这是一个示例:

DECLARE @Count int
SET @Count = 0

ONE_MORE_TIME:
IF @Count <> 33
    PRINT ‘Hello World’
    SET @Count = @Count + 1
END

IF @Count <> GOTO ONE_MORE_TIME

在您的情况下,标签可能是“ELSE”

DECLARE @Count int
SET @Count = 0

ELSE:
IF @Count < 33
    PRINT ‘Hello World’
    SET @Count = @Count + 1
END

IF @Count < 33 GOTO ELSE

我有一种感觉,这段代码也会严重缩进。我几乎愿意为此投入一些钱。

于 2010-06-16T18:55:24.263 回答
0

为什么不删除它、重新编译并测试应用程序,看看它可能产生什么影响?

于 2010-06-16T18:47:58.367 回答
0

嗯,它会导致 SQL2005 中的错误?

在 SQL Server 中,在 case 语句中使用 ELSE 来捕获尚未捕获的任何内容(它与已“通过”所有其他案例的事物有关)。例如,假设我们想列出价格数据库中的一些商品,并使用自定义的“预算”文本列对它们进行分类,因此对于每个商品,我们将查看它的价格并设置它的“预算”值应该是:

SELECT title, price,
        Budget = CASE price
         WHEN price > 20.00 THEN 'Expensive'
          WHEN price BETWEEN 10.00 AND 19.99 THEN 'Moderate'
          WHEN price < 10.00 THEN 'Inexpensive'
          ELSE 'Unknown'
        END,
FROM titles

这里的 ELSE 捕获了所有不属于“昂贵”或“中等”或“便宜”的内容。在此处删除这些 ELSE 肯定会弄乱您的查询。

于 2010-06-16T18:49:04.543 回答