2017-09-26 68 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