“ ข้อความค้นหาต่างกัน” คืออะไร


14

ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้เกี่ยวกับแบบสอบถาม SQL ที่ฉันใช้ในโปรแกรม SQL Server 2005 T-SQL

แบบสอบถามที่ต่างกันกำหนดให้มีการตั้งค่าANSI_NULLSและANSI_WARNINGSตัวเลือกสำหรับการเชื่อมต่อ สิ่งนี้ช่วยให้มั่นใจว่าความหมายของแบบสอบถามที่สอดคล้องกัน เปิดใช้งานตัวเลือกเหล่านี้แล้วออกแบบสอบถามของคุณอีกครั้ง (ความรุนแรง 16)

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

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)

ฉันคิดว่านี่เป็นเพราะการเชื่อมต่อกับเอ็นจิ้นฐานข้อมูลหลายอันในเคียวรีเดียวเนื่องจากฉันไม่เคยได้รับข้อผิดพลาดนี้เลย
"Heterogeneous" อ้างถึงการสืบค้นเอนจินฐานข้อมูลสองตัวในบริบทนี้หรือไม่?

คำตอบ:


8

"Heterogeneous" อ้างถึงการสืบค้นเอนจินฐานข้อมูลสองตัวในบริบทนี้หรือไม่?

โดยทั่วไปแล้วใช่ แบบสอบถามแบบ "ต่างกัน" จะถูกดำเนินการบนเซิร์ฟเวอร์ที่เชื่อมโยงแบบ "ต่างกัน" แบบสอบถามทั้งหมดไปยังเซิร์ฟเวอร์ที่เชื่อมโยงนี้จะต่างกัน

และ "heterogenous" เป็นส่วนย่อยของแบบสอบถามแบบกระจาย

  • กระจายข้อมูลที่เก็บไว้ใน SQL Server หลายอินสแตนซ์
  • ข้อมูลที่แตกต่างกันจัดเก็บในแหล่งข้อมูลเชิงสัมพันธ์และไม่ใช่สัมพันธ์ที่เข้าถึงได้โดยใช้ตัวให้บริการ OLE DB

แต่ "ต่างกัน" ปรากฏขึ้นทุกขณะแล้ว:

ดูการเชื่อมโยงเซิร์ฟเวอร์ใน MSDN

ความสามารถในการออกแบบสอบถามแบบกระจายอัพเดตคำสั่งและธุรกรรมบนแหล่งข้อมูลที่แตกต่างกันทั่วทั้งองค์กร

sp_addlinkedserver

เซิร์ฟเวอร์ที่มีการเชื่อมโยงช่วยให้สามารถเข้าถึงแบบสอบถามแบบกระจายที่ต่างกันกับแหล่งข้อมูล OLE DB

และตัวอย่าง MSDN ของการสืบค้น Active Directory ใน"การเข้าร่วมข้อมูลที่ต่างกัน"

และ MSDN อีกครั้ง"การจำลองแบบฐานข้อมูลต่างกัน"


6

เท่าที่ฉันรู้

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


เป็นรหัสจำลองมีคอลัมน์เดียวที่ฉันดึงมาจากฐานข้อมูล 40 แห่งและบันทึกลงในตาราง "รายงานสถานะ" ของค่าเหล่านั้น
Ben Brocka

1
โอวตกลง. เพียงต้องการให้แน่ใจว่าคุณทราบว่าค่าที่ใส่ลงในคอลัมน์นั้นใน Srv.db.dbo.table อาจแตกต่างกันไปขึ้นอยู่กับเวอร์ชันของ SQL Server ที่คุณใช้รหัส โดยเฉพาะจาก SQL 2005 ถึง SQL 2008 โดยใช้รหัสที่โพสต์คุณจะได้รับค่าที่แตกต่าง
mrdenny

ตอนนี้คุณได้รับฉันสนใจสิ่งที่เป็นปัญหาที่อาจเกิดขึ้นเพียงว่าฉันไม่ทราบว่าแถวเดียวที่ฉันได้รับ? ตารางมีแถวเดียวในกรณีนี้ซึ่งเป็นสาเหตุที่ไม่มีตำแหน่งในแบบสอบถามย่อย
Ben Brocka

หากมีหลายแถวในตารางด้วย SQL 2005 คุณจะได้แถวแรก ด้วย SQL 2008 ตารางใหม่จะได้แถวที่สอง (ฉันอาจจะย้อนกลับไป)
mrdenny

ฉันจะรักบทความจาก MS อธิบายอย่างชัดเจนว่า "การค้นหาที่แตกต่างกัน" คืออะไร แต่ดูเหมือนว่าสิ่งนั้นไม่มีอยู่จริงดังนั้นฉันจึงทำเครื่องหมายถูกต้อง
Ben Brocka

1

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

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