2010-03-17 32 views
133

Tôi đang đọc một cuốn sách về SQL. Trong cuốn sách đó có cụm từ Truy vấn quảng cáo học mà tôi không hiểu.Truy vấn Ad Hoc là gì?

Chính xác thì truy vấn đặc biệt là gì?

Trả lời

172

Ad hoc là chữ Latinh dành cho "vì mục đích này". Bạn có thể gọi nó là truy vấn "đang di chuyển" hoặc truy vấn "chỉ cần". Đó là loại truy vấn SQL mà bạn vừa lỏng lẻo gõ ra nơi bạn cần nó

var newSqlQuery = "SELECT * FROM table WHERE id = " + myId; 

... đó là một câu hỏi hoàn toàn khác nhau mỗi thời điểm đó dòng mã được thực thi, tùy thuộc vào giá trị của myId. Ngược lại với truy vấn đặc biệt là truy vấn được xác định trước, chẳng hạn như Thủ tục lưu trữ, nơi bạn đã tạo một truy vấn cho toàn bộ mục đích tổng quát của việc chọn từ bảng đó (nói) và chuyển ID dưới dạng biến.

+12

@David Hedlund truy vấn của bạn dễ bị tấn công 'Tấn công SQL injection' ... Bạn phải sử dụng tham số. – Parid0kht

+27

@Paridokht: Chắc chắn rồi. Tôi không ủng hộ việc sử dụng đó, tôi giải thích khái niệm về truy vấn đặc biệt, đó là câu hỏi. –

+9

@DavidHedlund: Vâng, tôi hiểu ... nhưng có thể tốt hơn là đề cập đến nó trong câu trả lời của bạn bởi vì có những người dùng đọc và không có bất kỳ ý tưởng nào về cuộc tấn công này. – Parid0kht

-4

Trong Sql Server "Truy vấn truy vấn quảng cáo" cũng được sử dụng cho Truy vấn phân phối quảng cáo học. Đây là những truy vấn đặc biệt trên một máy chủ khác thông qua OpenRowset hoặc OpenDatasource. Ad Hoc Distributed Queries chỉ được phép sau khi cấu hình như vậy. Đây là tùy chọn cấu hình máy chủ.

+0

đây không phải là về sql Server. câu hỏi không phải về một giải pháp riêng biệt mà là về sự hiểu biết chung về các truy vấn đặc biệt có ý nghĩa – arthur

1

Cũng muốn thêm truy vấn đặc biệt đó là dễ bị tấn công SQL injection. Chúng ta nên cố gắng tránh sử dụng nó và sử dụng các tham số SQL thay thế (like PreparedStatement in Java).

+6

Truy vấn đặc biệt là _not_ dễ bị tấn công với SQL Injection. Truy vấn không được chấp nhận chấp nhận đầu vào của người dùng dễ bị tấn công với SQL Injection. – Ben

+0

@Ben Truy vấn đặc biệt luôn không được tham số. Nó không thể được tiêm SQL tấn công nếu chúng ta không phơi bày các biến cho người dùng; nhưng vấn đề là truy vấn đặc biệt là nguy hiểm đối với SQL Injection. – xli

20

Truy vấn Ad-Hoc là truy vấn không thể xác định trước thời điểm truy vấn được phát hành. Nó được tạo ra để có được thông tin khi cần phát sinh và nó bao gồm SQL được xây dựng động mà thường được xây dựng bởi các công cụ truy vấn thường trú trên máy tính để bàn.

Kiểm tra: http://www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html

+0

Vì vậy, nếu tôi nhập một truy vấn tĩnh và chạy nó một lần, nó không phải là "ad hoc"? – jumxozizi

0

Ad hoc truy vấn là những người chưa được xác định là không cần thiết một cách thường xuyên, vì vậy họ không bao gồm trong bộ tiêu biểu của báo cáo hoặc truy vấn

+0

Bạn có thể giải thích những gì bạn đang viết nhiều hơn? "Bộ tiêu biểu" là gì? bạn có nghĩa là biên dịch mã? – Ben

-3

Một rao vặt Truy vấn -Hoc là:

  1. Câu hỏi được lên kế hoạch trước.
  2. Câu hỏi được lên lịch trước.
  3. thúc đẩy câu hỏi thời điểm này.
  4. Câu hỏi sẽ không trả lại bất kỳ kết quả nào.
+0

Điều này có ý nghĩa gì đối với SQL? Ngoài ra, không phải tất cả "Câu hỏi sẽ không trả về bất kỳ kết quả nào". là hocs quảng cáo. – jumxozizi

-3

Truy vấn đặc biệt là loại định nghĩa máy tính. Điều này có nghĩa là truy vấn này được thiết kế đặc biệt để có được bất kỳ thông tin nào khi nó chỉ cần thiết. Được xác định trước. hãy tham khảo https://www.youtube.com/watch?v=0c8JEKmVXhU

+0

Tôi nghĩ "Được xác định trước" là đối diện của "ad hoc". – jumxozizi

0

Truy vấn Ad-Hoc này là truy vấn không thể xác định trước thời điểm truy vấn được phát hành. Nó được tạo ra để có được thông tin khi cần phát sinh và nó bao gồm SQL được xây dựng động mà thường được xây dựng bởi các công cụ truy vấn thường trú trên máy tính để bàn. Truy vấn đặc biệt không nằm trong máy tính hoặc trình quản lý cơ sở dữ liệu nhưng được tạo động tùy thuộc vào nhu cầu của người dùng dữ liệu.

Trong SQL, truy vấn đặc biệt là lệnh/truy vấn được nhập lỏng lẻo có giá trị phụ thuộc vào một số biến. Mỗi khi lệnh được thực hiện, kết quả là khác nhau, tùy thuộc vào giá trị của biến. Nó không thể được xác định trước và thường đi theo truy vấn SQL lập trình động. Một truy vấn đặc biệt ngắn ngủi và được tạo ra khi chạy.

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