Truy vấn Ad Hoc là gì?


167

Tôi đang đọc một cuốn sách về SQL. Trong cuốn sách đó có thuật ngữ Ad Hoc Query mà tôi không hiểu.

Chính xác thì một truy vấn ad hoc là gì?

Câu trả lời:


225

Ad hoc là tiếng Latin cho "cho mục đích này". Bạn có thể gọi nó là truy vấn "đang hoạt động" hoặc truy vấn "chỉ như vậy". Đây là loại truy vấn SQL mà bạn chỉ cần gõ một cách lỏng lẻo ở nơi bạn cần nó

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

... Đó là một truy vấn hoàn toàn khác nhau mỗi khi dòng mã được thực thi, tùy thuộc vào giá trị của myId. Đối diện của một truy vấn ad hoc là một truy vấn được xác định trước, chẳng hạn như Thủ tục lưu trữ, trong đó bạn đã tạo một truy vấn duy nhất cho toàn bộ mục đích tổng quát là chọn từ bảng đó (giả sử) và chuyển ID dưới dạng một biến.


17
@David Hedlund truy vấn của bạn dễ bị tổn thương SQL injection attacks... Bạn phải sử dụng tham số.
Parid0kht

45
@Paridokht: Chắc chắn. Tôi không ủng hộ việc sử dụng đó, tôi đang giải thích khái niệm truy vấn ad hoc, đó là câu hỏi.
David Hedlund

12
@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 nó và không có ý tưởng nào về cuộc tấn công này.
Parid0kht

46
Nếu người dùng đọc nó và không có ý tưởng về việc tiêm SQL, họ sẽ không làm việc với bất cứ điều gì có thể là mối quan tâm của hacker. Chúng ta đừng đi đến cực đoan ...
Michal B.

7
Là một nhà phát triển có nhiều năm kinh nghiệm, tôi đã học được rất nhiều thứ trong khi tôi đang tìm kiếm thứ gì đó hoàn toàn khác với những gì tôi tìm kiếm. Vì vậy, IMHO thêm một câu giống như ' ... đừng quên thực hiện các biện pháp kiểm soát và vệ sinh cần thiết cho tài khoản của tôi ở đây ' sẽ không gây ra bất kỳ tác hại nào.
đáng sợ

24

Truy vấn Ad-Hoc là một truy vấn không thể được xác định trước thời điểm truy vấn được đưa ra. Nó được tạo ra để lấy thông tin khi có nhu cầu và nó bao gồm SQL được xây dựng động 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


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

1

Cũng muốn thêm rằng truy vấn ad hoc dễ bị tấn công SQL SQL. Chúng ta nên cố gắng tránh sử dụng nó và sử dụng các SQL được tham số hóa thay thế ( như PreparedStatement trong Java ).


7
Một truy vấn đặc biệt không dễ bị SQL Injection. Một truy vấn không được kiểm duyệt chấp nhận đầu vào của người dùng dễ bị tổn thương đối với SQL Injection.
Bến

@Ben Một truy vấn đặc biệt luôn không được tham số hóa. Nó không thể bị SQL 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 có nguy cơ đối với SQL Injection.
xli

1

Truy vấn Ad-Hoc là một truy vấn không thể được xác định trước thời điểm truy vấn được đưa ra. Nó được tạo ra để lấy thông tin khi có nhu cầu và nó bao gồm SQL được xây dựng động 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. Một truy vấn ad hoc 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, một truy vấn ad hoc là một lệnh / truy vấn được gõ lỏng lẻo mà giá trị của nó phụ thuộc vào một số biến. Mỗi lần lệnh được thực thi, kết quả sẽ 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 xuất hiện dưới truy vấn SQL lập trình động. Một truy vấn ad hoc tồn tại trong thời gian ngắn và được tạo ra trong thời gian chạy.


1

Một truy vấn đặc biệt là một truy vấn được tạo để cung cấp một bản ghi cụ thể từ bất kỳ hoặc nhiều bảng được hợp nhất có sẵn trên máy chủ DB. Các truy vấn này thường phục vụ một mục đích sử dụng một lần và có thể không cần thiết phải kết hợp vào bất kỳ thủ tục được lưu trữ nào để chạy lại trong tương lai.

Kịch bản đặc biệt : Bạn nhận được yêu cầu cho một tập hợp con dữ liệu cụ thể với một bộ biến duy nhất. Nếu không có truy vấn được viết sẵn có thể cung cấp các kết quả cần thiết, bạn phải viết một truy vấn đặc biệt để tạo kết quả recordset.

Ngoài một lần sử dụng Truy vấn đặc biệt là các thủ tục được lưu trữ ; tức là các truy vấn được lưu trữ trong công cụ giao diện DB. Các thủ tục được lưu trữ này sau đó có thể được thực hiện theo trình tự trong một mô-đun hoặc macro để hoàn thành một nhiệm vụ được xác định trước theo yêu cầu, theo lịch hoặc được kích hoạt bởi một sự kiện khác.

Kịch bản thủ tục được lưu trữ : Mỗi tháng bạn cần tạo một báo cáo từ cùng một tập hợp các bảng và có cùng các biến (các biến này có thể là các giá trị được xác định trước cụ thể, các giá trị được tính toán như đầu cuối của tháng hiện tại hay giá trị đầu vào của người dùng). Bạn sẽ tạo thủ tục như một truy vấn đặc biệt lần đầu tiên. Sau khi kiểm tra kết quả để đảm bảo độ chính xác, bạn có thể chọn triển khai truy vấn này. Sau đó, bạn sẽ lưu trữ truy vấn hoặc chuỗi truy vấn trong mô-đun hoặc macro để chạy lại khi cần.


0

Các truy vấn đặc biệt là những truy vấn chưa được xác định không cần thiết trên cơ sở thường xuyên, do đó chúng không được bao gồm trong bộ báo cáo hoặc truy vấn thông thường


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

0

Báo cáo đặc biệt chỉ là Báo cáo T-SQL có mệnh đề Where và mệnh đề Where có thể có nghĩa đen như sau:

Select * from member where member_no=285;

hoặc một biến:

declare @mno INT=285;
Select * from member where member_no=@mno

-4

Một truy vấn Ad-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
  4. Câu hỏi sẽ không trả lại bất kỳ kết quả.

Điều này có nghĩa gì trong thuật ngữ SQL? Ngoài ra, không phải tất cả "Câu hỏi sẽ không trả lại bất kỳ kết quả nào." là các nhóm quảng cáo.
jumxozizi

-5

Truy vấn ad hoc là loại định nghĩa máy tính. Điều đó 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 chỉ cần thiết. Được xác định trước. tham khảo https://www.youtube.com/watch?v=0c8JEKmVXhU này


1
Tôi nghĩ "Được xác định trước" ngược lại với "ad hoc".
jumxozizi

-6

Trong Sql Server, "Ad Hoc Query" cũng được sử dụng cho Truy vấn phân phối Ad Hoc. Đâ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. Truy vấn phân phối Ad Hoc chỉ được phép sau khi định cấu hình như vậy. Đây là một tùy chọn cấu hình máy chủ.


Đây không phải là về máy chủ sql. câu hỏi không phải là về một giải pháp entreprise đặc biệt mà là về một sự hiểu biết tổng quát về ý nghĩa quảng cáo truy vấn đặc biệt
arthur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.