2010-06-16 71 views
1

我有很多VB6项目,我将其中一些查询传递给具有“ELSE:”与case语句中使用的冒号的服务器。带有“ELSE:”的SQL Server查询

我想知道有人能告诉我**冒号用于什么吗?它会导致SQL2005及更高版本中的错误,但SQL2000不会造成任何投诉。

我想刚刚从代码&重新编译删除它,但我恐怕它会破坏其他10件事情中的应用..

在此先感谢...

回答

0

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

+0

因为在SQL case语句中使用ELSE来捕捉任何未匹配的内容 - 这可能是SQL语句的一大部分。 – 2010-06-16 18:49:58

+2

@ rlb.usa:我知道ELSE做了什么。但是,如果他的陈述选项是他想要移除它,但不确定影响。那么根据定义,他应该删除它并测试影响。这是学习的方式。 – NotMe 2010-06-16 18:52:00

+1

可能最终我会做什么。或者可能是通过代码到调用的地方,复制代码生成的SQL并在企业管理器中尝试看看会发生什么 – 2010-06-16 18:53:54

0

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

在SQL服务器中,在case语句中使用ELSE来捕获尚未捕获的任何内容(它与其他所有情况都“堕落”的内容有关)。 For example,假设我们希望列出价格数据库中的一些项目并使用自定义的“预算”文本列对其进行分类,因此对于每个项目,我们将查看它的价格并设置其“预算”值应为:

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在这里肯定会搞砸你的查询。

+0

是的,我知道其他函数是如何...代码(我继承了。换句话说我没有写,我保持它...) 当然,如果我拿出ELSE它会有不同的功能。我的问题是关于COLON。为什么在那里?它的目的是什么? – 2010-06-16 18:52:41

+0

他的问题不是ELSE它与ELSE:请注意在后来的SQL版本中导致sql问题的冒号。 – NotMe 2010-06-16 18:52:44

+0

哦,在这种情况下,我同意@Chris_Lively,这是一个语法,而不是语义问题。 – 2010-06-16 18:54:14

4

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

TSQL后跟一个冒号的单词是一个Label。下面是一个示例:

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 

我有一种感觉,这个代码将是严重的缩进以及。我几乎愿意为此付出一些钱。

+0

也可能是这样。我希望不是,但我需要寻找GOTO ELSE吗?除了可怕的缩影之外,现在我们已经为标签保留了词语......我放弃了...... – 2010-06-16 18:58:25

+0

或者他们可能无意中使用了ELSE作为标签,并且没有意识到其他人无法正常工作。但是,我会搜索GOTO Else语句。 – HLGEM 2010-06-16 19:10:16

+0

+1。这绝对是最有意义的。我没有用这么长时间的标签,我忘了这甚至是一个选项。 – NotMe 2010-06-16 20:15:31