Ad Hoc Query คืออะไร


167

ฉันอ่านหนังสือเกี่ยวกับ SQL ในหนังสือเล่มนั้นมีคำศัพท์Ad Hoc Queryซึ่งฉันไม่เข้าใจ

คำค้นหาเฉพาะกิจคืออะไร

คำตอบ:


225

Ad hocเป็นภาษาละตินสำหรับ "เพื่อจุดประสงค์นี้" คุณอาจเรียกมันว่าแบบสอบถามแบบ "ทันที" หรือแบบสอบถาม "เพียงเพื่อ" มันเป็นชนิดของเคียวรี SQL ที่คุณเพียงแค่พิมพ์อย่างที่คุณต้องการ

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

... myIdซึ่งเป็นแบบสอบถามที่แตกต่างกันอย่างสิ้นเชิงในแต่ละครั้งที่บรรทัดของรหัสจะถูกดำเนินการขึ้นอยู่กับค่าของ ตรงข้ามของแบบสอบถามเฉพาะกิจคือแบบสอบถามที่กำหนดไว้ล่วงหน้าเช่นกระบวนงานที่เก็บไว้ซึ่งคุณได้สร้างแบบสอบถามเดียวสำหรับวัตถุประสงค์ทั่วไปทั้งหมดของการเลือกจากตารางนั้น (พูด) และส่งรหัสเป็นตัวแปร


17
@David Hedlund ข้อความค้นหาของคุณเสี่ยงที่จะSQL injection attacks... คุณต้องใช้พารามิเตอร์
Parid0kht

45
@Paridokht: แน่นอน ฉันไม่ได้สนับสนุนการใช้งานนั้นฉันกำลังอธิบายแนวคิดของคำถามเฉพาะกิจซึ่งเป็นคำถาม
David Hedlund

12
@DavidHedlund: ใช่ฉันเข้าใจดี แต่อาจเป็นการดีกว่าที่จะพูดถึงมันในคำตอบของคุณเพราะมีผู้ใช้ที่อ่านข้อความนี้และไม่มีความคิดใด ๆ เกี่ยวกับการโจมตีครั้งนี้
Parid0kht

46
หากผู้ใช้อ่านและไม่มีความคิดเกี่ยวกับการฉีด SQL พวกเขาจะไม่ทำงานในสิ่งที่อาจเป็นที่สนใจของแฮ็กเกอร์ อย่าไปสุดขั้ว ...
มิคาลบี

7
ในฐานะนักพัฒนาที่มีประสบการณ์มานานหลายปีฉันได้เรียนรู้หลายสิ่งหลายอย่างในขณะที่ฉันกำลังมองหาบางสิ่งที่แตกต่างไปจากที่ฉันค้นหา ดังนั้น IMHO เพิ่มประโยคเช่นเดียวกับ ' ... อย่าลืมทำการควบคุมที่จำเป็นและการฆ่าเชื้อสำหรับฉันที่นี่ ' จะไม่ก่อให้เกิดอันตรายใด ๆ
scaryguy

24

Ad-Hoc Query คือแบบสอบถามที่ไม่สามารถระบุได้ก่อนที่จะมีการออกแบบสอบถาม มันถูกสร้างขึ้นเพื่อรับข้อมูลเมื่อจำเป็นต้องเกิดขึ้นและประกอบด้วย SQL ที่สร้างขึ้นแบบไดนามิกซึ่งมักจะสร้างขึ้นโดยเครื่องมือเคียวรีที่อาศัยอยู่ที่เดสก์ท็อป

ตรวจสอบ: http://www.learn.geekinterview.com/data-warehouse/dw-basics/what-is-an-ad-hoc-query.html


ดังนั้นหากฉันพิมพ์ข้อความค้นหาแบบสแตติกและเรียกใช้ครั้งเดียวไม่ใช่ "ad hoc"
jumxozizi

1

นอกจากนี้ต้องการเพิ่มว่าคิวรีเฉพาะกิจนั้นมีความเสี่ยงต่อการถูกโจมตีจากการฉีด SQL เราควรพยายามหลีกเลี่ยงการใช้มันและใช้พารามิเตอร์ SQLs แทน ( เช่น PreparedStatement ใน Java )


7
แบบสอบถามเฉพาะกิจไม่เสี่ยงต่อการฉีด SQL แบบสอบถามแบบไม่มีพารามิเตอร์ที่ยอมรับการป้อนข้อมูลของผู้ใช้มีความเสี่ยงต่อการฉีด SQL
เบ็น

@Ben คิวรีแบบเฉพาะกิจไม่มีการกำหนดพารามิเตอร์เสมอ ไม่สามารถโจมตี SQL injection ได้ถ้าเราไม่เปิดเผยตัวแปรให้กับผู้ใช้ แต่ประเด็นคือแบบสอบถามแบบเฉพาะกิจมีความเสี่ยงต่อการฉีด SQL
xli

1

Ad-Hoc Query คือแบบสอบถามที่ไม่สามารถระบุได้ก่อนที่จะมีการออกแบบสอบถาม มันถูกสร้างขึ้นเพื่อรับข้อมูลเมื่อจำเป็นต้องเกิดขึ้นและประกอบด้วย SQL ที่สร้างขึ้นแบบไดนามิกซึ่งมักจะสร้างขึ้นโดยเครื่องมือเคียวรีที่อาศัยอยู่ที่เดสก์ท็อป แบบสอบถามเฉพาะกิจไม่ได้อยู่ในคอมพิวเตอร์หรือตัวจัดการฐานข้อมูล แต่สร้างแบบไดนามิกขึ้นอยู่กับความต้องการของผู้ใช้ข้อมูล

ใน SQL เคียวรีเฉพาะกิจนั้นเป็นคำสั่ง / คิวรีที่พิมพ์อย่างอิสระซึ่งค่าขึ้นอยู่กับตัวแปรบางตัว แต่ละครั้งที่คำสั่งถูกดำเนินการผลลัพธ์จะแตกต่างกันขึ้นอยู่กับค่าของตัวแปร ไม่สามารถกำหนดไว้ล่วงหน้าและมักจะมาภายใต้แบบสอบถาม SQL แบบไดนามิก แบบสอบถามเฉพาะกิจไม่สั้นและสร้างเมื่อรันไทม์


1

แบบสอบถาม Ad-hocเป็นหนึ่งสร้างขึ้นเพื่อให้ระเบียนเฉพาะจากส่วนใดหรือหลายรวมตารางที่มีอยู่บนเซิร์ฟเวอร์ฐานข้อมูล แบบสอบถามเหล่านี้มักจะให้บริการแบบใช้ครั้งเดียวและอาจไม่จำเป็นต้องรวมเข้ากับกระบวนงานใด ๆ ที่เก็บไว้เพื่อเรียกใช้อีกครั้งในอนาคต

Ad-hoc สถานการณ์ : คุณได้รับการร้องขอสำหรับชุดย่อยของข้อมูลที่เฉพาะเจาะจงกับชุดของตัวแปรที่ไม่ซ้ำกัน ถ้าไม่มีแบบสอบถามที่เขียนล่วงหน้าที่สามารถให้ผลลัพธ์ที่จำเป็นคุณต้องเขียนแบบสอบถาม Ad-hoc เพื่อสร้างผลลัพธ์ชุดระเบียน

นอกเหนือจากการใช้เพียงครั้งเดียวแบบสอบถาม Ad-hoc ได้รับการจัดเก็บ ; เช่นแบบสอบถามที่เก็บอยู่ในเครื่องมือส่วนต่อประสานฐานข้อมูล ขั้นตอนการจัดเก็บเหล่านี้สามารถดำเนินการตามลำดับภายในโมดูลหรือมาโครเพื่อให้งานที่กำหนดไว้ล่วงหน้าสำเร็จตามต้องการหรือตามกำหนดเวลาหรือถูกเรียกใช้โดยเหตุการณ์อื่น

ภาพจำลองกระบวนงานที่เก็บไว้ : ทุกเดือนคุณต้องสร้างรายงานจากชุดตารางเดียวกันและมีตัวแปรเดียวกัน (ตัวแปรเหล่านี้อาจเป็นค่าที่กำหนดไว้ล่วงหน้าโดยเฉพาะค่าที่คำนวณเช่น "สิ้นเดือนปัจจุบัน" หรือค่าอินพุตของผู้ใช้) คุณจะสร้างขั้นตอนเป็นคิวรีแบบเฉพาะกิจในครั้งแรก หลังจากทดสอบผลลัพธ์เพื่อให้แน่ใจว่าถูกต้องคุณสามารถเลือกที่จะปรับใช้แบบสอบถามนี้ จากนั้นคุณจะต้องเก็บแบบสอบถามหรือชุดการสืบค้นในโมดูลหรือแมโครเพื่อให้ทำงานได้อีกครั้งตามที่ต้องการ


0

Ad hoc query เป็นคำที่ไม่ได้กำหนดไว้และไม่จำเป็นเป็นประจำดังนั้นจึงไม่รวมอยู่ในชุดรายงานหรือแบบสอบถามทั่วไป


คุณช่วยอธิบายสิ่งที่คุณเขียนเพิ่มเติมได้ไหม? "ชุดทั่วไป" คืออะไร; คุณหมายถึงรหัสที่คอมไพล์แล้ว?
เบ็น

0

Ad-hoc Statments เป็นเพียงคำสั่ง T-SQL ที่มีส่วนคำสั่ง Where และส่วนคำสั่งไหนที่สามารถมีตัวอักษรเช่น:

Select * from member where member_no=285;

หรือตัวแปร:

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

-4

แบบสอบถาม Ad-Hoc คือ:

  1. คำถามที่วางแผนล่วงหน้า
  2. คำถามที่กำหนดล่วงหน้า
  3. เดือยคำถามช่วงเวลา
  4. คำถามที่จะไม่ส่งคืนผลลัพธ์ใด ๆ

สิ่งนี้หมายความว่าในแง่ SQL? นอกจากนี้ไม่ใช่ "คำถามที่จะไม่ส่งคืนผลลัพธ์ใด ๆ " คือโฆษณา hocs
jumxozizi

-5

Ad hoc query เป็นประเภทของคำจำกัดความคอมพิวเตอร์ ซึ่งหมายความว่าแบบสอบถามนี้ออกแบบมาเป็นพิเศษเพื่อรับข้อมูลใด ๆ เมื่อจำเป็นเท่านั้น ที่กำหนดไว้ล่วงหน้า อ้างอิงhttps://www.youtube.com/watch?v=0c8JEKmVXhU


1
ฉันคิดว่า "ที่กำหนดไว้ล่วงหน้า" ตรงกันข้ามกับ "ad hoc"
jumxozizi

-6

ใน SQL Server "Ad Hoc Query" ยังใช้สำหรับ Ad Hoc Distributed Query นี่คือคิวรีเฉพาะกิจในเซิร์ฟเวอร์อื่นผ่าน OpenRowset หรือ OpenDatasource Ad Hoc Distributed Query ได้รับอนุญาตหลังจากกำหนดค่าเท่านั้น นี่คือตัวเลือกการกำหนดค่าเซิร์ฟเวอร์


นี่ไม่เกี่ยวกับ sql Server คำถามไม่ได้เกี่ยวกับโซลูชัน entreprise โดยเฉพาะ แต่เกี่ยวกับความเข้าใจทั่วไปของความหมายเฉพาะกิจแบบสอบถาม
arthur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.