不同的編程語言,SQL不使用以下語法允許變量被分配一個值(而不是我們必須使用SET
或SELECT
):爲什麼SQL不允許使用語法@i = 100;爲變量賦值?
@i=100; //error
是否有特別的原因SQL不允許這樣做?
謝謝
不同的編程語言,SQL不使用以下語法允許變量被分配一個值(而不是我們必須使用SET
或SELECT
):爲什麼SQL不允許使用語法@i = 100;爲變量賦值?
@i=100; //error
是否有特別的原因SQL不允許這樣做?
謝謝
想到的第一個原因是SQL使用'=' - 符號來比較值作爲值的設置。這意味着它需要使用不同的語法來區分比較和設置值。在(某些)其他編程中,使用'=' - 符號和'==' - 符號來設置和比較這些值是有區別的。 例如,在SQL:
SET @a = 100 --To set the value of @a.
if (@a = 100) -- To compare the value of @a.
例如,在C#:
a = 100; //To set the value of a.
if (a == 100) //To compare the value of a.
爲什麼任何語言都使用它使用的語法?
維護約定,避免歧義並簡化解析。
注意的SET
報表(正常調用賦值語句)的語法是UPDATE
語句的SET
子句中的語法類似:
UPDATE mytable SET somecolumn = 100;
嘛,SQL是不是一種編程語言。
我不能說我知道原因。但是,這可能與SQL的預期用途有關。即,使用數據。誰使用大量數據?生意人。這樣的語言使用更多的文字和更少的符號。將VisualBasic的風格與C++進行比較。
「SQL不是一個預設電臺的語言'[來源]'」是什麼讓一個語言的編程語言和另一種語言不是一種編程語言? – 2010-07-14 19:30:28
SQL被視爲4G編程語言; Java/C#/等被認爲是3G。由於更接近於自然英語語法,SQL有更高的評價,其中一些事情我忘了從學校... – 2010-07-14 19:34:42
@Bill Karwin這取決於你對'是'的定義是...;)SQL分爲兩部分,數據操作語言和數據定義語言。這取決於你想如何分割頭髮。 :) – 2010-07-14 19:35:12
你不如說我爲什麼不能在c#中做到這一點?
SELECT * FROM MyArray[]
爲什麼我必須迭代和亂用Console.WriteLine?這只是我想要一眼就看到的一組數據集。
'從MyArray中的物品中選擇物品' – 2010-07-14 19:40:11
@John Saunders:你沒有*要做到這一點...... ;-) – gbn 2010-07-14 19:57:39
我忍不住了。 – 2010-07-14 20:04:06
變量被聲明後,它被初始化爲NULL。使用SET語句爲聲明的變量分配一個不爲NULL的值。
所以說TSQL SET documentation。我不記得使用SET keyword in Oracle's PLSQL。
Givem PL/SQL語法是類似於Ada的,這並不奇怪...... – gbn 2010-07-14 19:36:06
添加MySQL也只使用SET關鍵字作爲系統級別的變量,我想象PostgreSQL類似於Oracle ... – 2010-07-14 19:38:37
這些變量是Transact-SQL的一部分,而不是SQL標準。
SQL沒有被設計爲編寫程序代碼,所以它對除集合操作以外的其他任何支持的支持大部分都是在專有擴展中被固定。
+1對於可能的答案。 SET是ANSI SQL,但是 – gbn 2010-07-14 19:58:38
爲什麼你需要在變量名稱的開頭加上「@」?以幫助解析命令
SET
或SELECT
有助於區分賦值和比較,它只是TSQL的設計方式。
使用:
SET @i=100 --for single assignments
和
SELECT @i=100,@a=200,@c=300 --for multiple assignements, which is
--faster than the equivalent multiple SET commands
我認爲他們這樣做是故意只是想讓你生氣。
等待?你的意思是不是故意惹惱我,而是別人嗎?!?!? – 2010-07-15 13:09:56
謝謝大家的幫助 – flockofcode 2010-07-16 18:31:42