T-SQL中的语句块

时间:2017-09-26 18:49:52

标签: sql-server tsql

我来自JavaScript背景,而且我正在尝试学习T-SQL,我对代码的组织感到困扰。

现在我在WHILE循环的文档中查看Example A,并将其写成:

WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300  
BEGIN  
   UPDATE Production.Product  
      SET ListPrice = ListPrice * 2  
   IF (SELECT MAX(ListPrice) FROM Production.Product) > $500  
      BREAK  
   ELSE  
      CONTINUE  
END  
PRINT 'Too much for the market to bear';  

它并不复杂。它易于阅读和理解,但由于缺少{}来定义块,它对我来说看起来没有组织。如果我在JavaScript中编写相同类型的东西,它看起来像:

WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300  {
    UPDATE Production.Product  
    SET ListPrice = ListPrice * 2  
    IF (SELECT MAX(ListPrice) FROM Production.Product) > $500  {
        BREAK;
    } ELSE {
        CONTINUE;
    }
};
console.log('Too much for the market to bear');

所以我的问题是:T-SQL(针对SQL Server)内置了什么,可以让您以这种方式组织代码而不会对代码本身产生影响?我可以添加()或{}来分解块吗?

1 个答案:

答案 0 :(得分:3)

在SQL中,BEGINEND是任何语句集的结束和结束块 但是,您可以编写如下代码,这将是合法的

WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300  --{
BEGIN
    UPDATE Production.Product  
    SET ListPrice = ListPrice * 2  
    IF (SELECT MAX(ListPrice) FROM Production.Product) > $500  --{
        BREAK;
    --} 
   ELSE --{
        CONTINUE;
    --}
--};
END

详细的代码就像

WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300  --{
BEGIN
    UPDATE Production.Product  
    SET ListPrice = ListPrice * 2  
    IF (SELECT MAX(ListPrice) FROM Production.Product) > $500  --{
    BEGIN
        BREAK;
    END
    --} 
   ELSE --{
   BEGIN
        CONTINUE;
   END
    --}
--};
END