2017-09-26 67 views
1

我来自JavaScript的背景,因为我正在努力学习T-SQL,所以我对代码的组织感到困扰。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

我的意思是,'{..}'分别替换为'BEGIN .. END'。只有一条线时才需要它们 – Lamak

+0

与Microsoft @SeanLange交谈(https://docs.microsoft.com/zh-cn/sql/t-sql/language-elements/while-transact-sql) 。虽然我很确定它只是在那里显示循环如何工作。 –

+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