2010-03-18 81 views
17

我正在讀一本關於SQL的書。這個查詢是什麼意思?

在那本書中,我看到了下面奇怪查詢:

SELECT * into mycustomer from customer WHERE 1=2 

在此查詢,什麼是 「其中1 = 2」?

+0

正如大家在下面所說的那樣,條件總是錯誤的。我已經看到了與動態SQL一起使用的技術,作爲獲取查詢中列的描述符的一種方式 - 但是您不會有INTO子句。 – 2010-03-18 06:47:02

+7

Jonathan:INTO子句用於通過查詢'customer'來創建一個新表mycustomer。在這種情況下,不會返回任何行,因此將創建一個空表。這是一個複製表結構的習慣用法。 – Gabe 2010-03-18 06:58:48

回答

25

通常用於將一個表的結構複製到另一個表中,如同您的情況。

SELECT * INTO mycustomer FROM customer WHERE 1=2 

這段代碼在你的新表MyCustomer創建表Customer的相同的結構。 注意即在SQL Server中,約束不被複制;所以可能你需要重新創建約束。

+1

到目前爲止,你是唯一一個正確的人。做得好! – Gabe 2010-03-18 06:57:20

+0

我明白了!謝謝,KMan! – zihado 2010-03-18 09:04:29

3

1=2將永遠是false

這是一種指定總是計算爲falseWHERE子句的方法。

類似的事情是WHERE 1=1其總是評估爲true

+0

+1用於添加「類似的東西」1 = 1。 – 2010-03-18 06:55:59

0
WHERE 1=2 

是不可能的,這樣的條件永遠是假的。這是一個錯字嗎?也許它是清除一個變量的負載?由於SELECT INTO將所有列放入@COLUMNNAME變量

0

它不過就像在你的情況下,SQL injecttion它總是假的,如果1 = 1比它的真實和將返回我用傳統的ASP時,所有的客戶數據

1

回到過去,我用「WHERE 1 = 2」結構來檢索表的列定義而不是其內容。現在有更好的方法通過使用對象關係映射框架來檢索列定義。

我的猜測是,你正在閱讀的書有點過時,或者這個查詢的上下文是錯位的。