2010-03-18 45 views
17

Tôi đang đọc một cuốn sách về SQL.Truy vấn này có ý nghĩa gì?

Trong cuốn sách đó, tôi thấy câu hỏi kỳ lạ dưới đây:

SELECT * into mycustomer from customer WHERE 1=2 

Trong truy vấn này, "WHERE 1 = 2" là gì?

+0

Như mọi người đã nói bên dưới, điều kiện luôn luôn là sai. Tôi đã nhìn thấy kỹ thuật đó được sử dụng với SQL động như là một cách để có được một bộ mô tả cho các cột trong truy vấn - nhưng bạn không có một mệnh đề INTO. –

+7

Jonathan: mệnh đề INTO được sử dụng để tạo một bảng mới 'mycustomer' bằng cách truy vấn' khách hàng'. Trong trường hợp này không có hàng nào được trả về, do đó một bảng trống sẽ được tạo. Đây là một thành ngữ để sao chép cấu trúc bảng. – Gabe

Trả lời

25

Thường được sử dụng để sao chép cấu trúc của một bảng sang bảng khác, như trong trường hợp của bạn.

SELECT * INTO mycustomer FROM customer WHERE 1=2 

Mã này tạo ra một cấu trúc giống hệt nhau của bảng Customer trong bảng mới của bạn MyCustomer. Lưu ý rằng trong SQL Server, các ràng buộc không được sao chép; vì vậy có lẽ bạn sẽ cần phải tạo lại các ràng buộc.

+1

Bạn là người duy nhất đã nhận được nó cho đến nay. Làm tốt lắm! – Gabe

+0

Tôi hiểu rồi! Cảm ơn, KMan !! – zihado

3

1=2 sẽ luôn là false.

Đây là cách để chỉ định mệnh đề WHERE sẽ luôn đánh giá là false.

Điều tương tự là WHERE 1=1 luôn đánh giá là true.

+0

+1 để thêm 'điều tương tự' 1 = 1. –

0
WHERE 1=2 

Không thể để điều kiện đó luôn sai. Nó là một lỗi đánh máy? Có lẽ nó là để xóa một tải của các biến? Vì SELECT INTO sẽ đặt tất cả các cột vào @COLUMNNAME vars

0

của nó không có gì nhưng cũng giống như một injecttion SQL trong trường hợp của bạn nó sẽ luôn luôn false nếu 1 = 1 hơn thật sự của nó và sẽ trả lại tất cả khách hàng dữ liệu

1

Quay trở lại những ngày xa xưa khi tôi đã sử dụng ASP cổ điển, tôi đã sử dụng cấu trúc "WHERE 1 = 2" để truy xuất các định nghĩa cột của bảng chứ không phải nội dung của nó. Ngày nay, có nhiều cách tốt hơn để lấy ra các định nghĩa cột bằng cách sử dụng một khung công tác ánh xạ quan hệ đối tượng.

Tôi đoán là sách bạn đang đọc hơi lỗi thời hoặc ngữ cảnh của truy vấn này bị đặt không đúng chỗ.

Các vấn đề liên quan