ลักษณะการทำงานของฟังก์ชัน IDENTITY เมื่อใช้กับ SELECT ไว้หรือ INSERT แบบสอบถาม select ที่ประกอบด้วยการอนุประโยคสั่ง BY

ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:273586
บทความนี้ถูกเก็บถาวรแล้วเนื้อหาของบทความจึงถูกนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
สรุป
เมื่อคุณใช้การสอบ SELECT เข้าถามด้วยการรหัสประจำตัวฟังก์ชันและอนุประโยคใบสั่ง BY ค่า identity ที่สร้างขึ้นจะมีการให้ใบสั่งเดียวกันเป็นใบสั่งที่ให้ไว้ตามลำดับ BY อนุประโยคไม่ ตัวอย่างเช่น ถ้าการรหัสประจำตัวฟังก์ชันการเริ่มต้น ด้วยเมล็ด 1 และการเพิ่ม 1 แถวแรกในชุดผลลัพธ์ที่สั่งซื้ออาจมีค่าแตกต่างจาก 1 และแถวที่สองอาจทำให้เกิดการเรียกใช้ค่าที่แตกต่างจาก 2 และเพื่อให้การสั่งซื้ออาจปรากฏ forth.While ตามที่คุณคาดว่าลักษณะการทำงานจะไม่มี แสดง TOP หรือ SET ROWCOUNT ยังไม่รับประกันลำดับของแถว

ถ้าคุณต้องการรหัสประจำตัวค่าที่จะถูกกำหนดในต้องตามลำดับที่ตามการสั่งซื้อในอนุประโยคสั่ง BY สร้างตารางที่ประกอบด้วยคอลัมน์ที่มีการรหัสประจำตัวคุณสมบัติและการเรียกใช้แล้วเป็น INSERT select สอบ…สั่ง BY ถามเพื่อเติมข้อมูลตารางนี้
ข้อมูลเพิ่มเติม
ข้อมูลเฉพาะค่าที่สร้างขึ้นขึ้นอยู่กับตำแหน่งของGetIdentity()ฟังก์ชันในแผนภูมิแบบสอบถาม (showplan), ซึ่งอาจเปลี่ยนแปลงได้เนื่องจากการเปลี่ยนแปลง optimizer แผนแบบสอบถามพอร์ตขนาน หรือปัจจุบันของ ROWCOUNT TOP/SET ในขณะที่คุณอาจพบสถานการณ์ที่เป็น SELECT ไปกับข้อรหัสประจำตัวฟังก์ชันและอนุประโยคใบสั่ง BY ผลิตค่าในใบสั่งที่คุณ desire จะไม่มีการทำงานนี้ และอาจเปลี่ยนแปลง โดยไม่มีการแจ้งเตือนสถานการณ์สมมติต่อไปนี้เป็นคำสั่ง SELECT เข้าที่เกี่ยวข้องกับ และมีรหัสประจำตัวฟังก์ชัน

เลือกตารางที่มีชื่อOldTableโดยค่าต่อไปนี้
Col1      Col2-------   --------1         A          11        F 7         G          17        I          2         Z          

สถานการณ์สมมติ 1

ในสถานการณ์สมมตินี้ แบบสอบถาม SELECT ไปใช้ฟังก์ชันข้อความเป็นตัวตนและอนุประโยคใบสั่ง BY
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)INTO 	NewTableFROM 	OldTableOrder By Col1
NewTableอาจถูกแทรก ด้วยแถวในสองวิธีต่อไปนี้อย่างใดอย่างหนึ่ง

วิธีที่ 1:

Col1      Col2       ID-------   --------   --------1         A          42         Z          27         G          511        F          317        I          1
คุณอาจสังเกตเห็นว่า ค่า IDENTITY ที่สร้าง SQL Server ไม่ได้อยู่ในใบสั่งเดียวกันเป็น(คอลัมน์ลำดับ BYCol1) ในการสอบถาม

วิธีที่ 2

Col1     Col2       ID-------  --------   -------1        A          12        Z          27        G          311       F          417       I          5
ในกรณีนี้ คุณอาจสังเกตเห็นว่า ข้อมูลเฉพาะค่าที่ SQL Server สร้างเป็นลำดับอย่างแน่นอนเหมือนกันเป็น(คอลัมน์ลำดับ BYCol1) ในการสอบถาม อย่างไรก็ตาม นี้ coincidental และไม่ใช่ใบรับประกันที่คุณจะได้รับทุกครั้งที่มีรันการสอบถาม

สถานการณ์สมมติ 2

สอบถามการเข้า SELECT ไปต่อไปนี้ใช้ฟังก์ชันรหัสประจำตัวและอนุเป็นใบสั่ง BY ประโยค โดยใช้ตัวดำเนินการ TOP หรือ SET ROWCOUNT คำชี้แจงสิทธิ์
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)INTO NewTableFROM OldTableOrder By Col1
หรือ
SET ROWCOUNT 3SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)INTO NewTableFROM OldTableOrder By Col1
NewTableอาจถูกแทรก ด้วยแถวในลักษณะเป็นไปได้สามต่อไปนี้อย่างใดอย่างหนึ่ง:

วิธีที่ 1:

Col1   Col2   ID-----  -----  -----1      A      22      Z      17      G      3
ในกรณีนี้ คุณอาจพบว่า ข้อมูลเฉพาะค่าที่สร้าง SQL Server ไม่ในใบสั่งเดียวกันเป็น(คอลัมน์ลำดับ BYCol1) ในการสอบถาม

วิธีที่ 2

Col1    Col2     ID------  ------   ------1       A        12       Z        27       G        3
ในกรณีนี้ คุณอาจสังเกตเห็นว่า ข้อมูลเฉพาะค่าที่ SQL Server สร้างอยู่ในใบสั่งเดียวกันเป็น(คอลัมน์ลำดับ BY เท่านั้นCol1) ในการสอบถาม อย่างไรก็ตาม นี้ coincidental และไม่ใช่ใบรับประกันที่คุณจะได้รับทุกครั้งที่มีรันการสอบถาม

วิธีที่ 3

Col1   Col2    ID------ ------  ------1      A       42      Z       27      G       5
ในกรณีนี้ ค่า IDENTITY ที่สร้าง SQL Server ไม่ได้อยู่ในใบสั่งเดียวกันเป็น(คอลัมน์ลำดับ BYCol1) ในการสอบถาม นอกจากนี้ ข้อมูลที่ใส่ไม่ตรงกับความเมล็ดและเพิ่มต้องถูกระบุในฟังก์ชันตัวตนในการสอบถาม (เมล็ด = 1 เพิ่ม = 1)

จริง ๆ แล้ว การรหัสประจำตัวฟังก์ชันสร้างข้อมูลเฉพาะค่าที่ถูกต้องโดยใช้พารามิเตอร์เมล็ดและเพิ่ม อย่างไรก็ตาม การสร้างค่า identity เกิดขึ้นก่อนที่แถวจะถูกเรียงลำดับตามใบสั่ง BY อนุประโยค ดังนั้น เมื่อคุณใช้ตัวดำเนินการ TOP หรือ ROWCOUNT ที่ SET งบ แถวแทรกลงใน(resultant ตารางNewTable) ราวกับ มีค่าที่ระบุไม่ถูกต้อง ข้อมูลเฉพาะค่า SQL Server สร้าง might ไม่ตรงกับพารามิเตอร์เมล็ดและเพิ่มที่อยู่ของรหัสประจำตัวฟังก์ชัน

ที่นี่คือตัวอย่างที่เกี่ยวข้องกับการแทรกลงใน SELECT จากกับใบสั่ง BY อนุประโยค

เลือกตารางที่มีชื่อOldTableโดยค่าต่อไปนี้:
Col1      Col2-------   --------1         S          11        F 7         G          17        I2         z


ด้านล่างนี้คือ ตารางเป้าหมายการตั้งชื่อNewTable(รหัสไม่มีคอลัมน์ข้อมูลเฉพาะตัว)
ID (identity)    Col1     Col2---------------    -------   ------


สอบดังต่อไปนี้ใส่ลงใน SELECT จากถาม ด้วยการอนุประโยคสั่ง BY จะรับประกันได้ว่า คอลัมน์ ID ในNewTableอยู่ในใบสั่งเดียวกันเป็นCol1.
INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 
ID (identity)    Col1     Col2-------------    ------   ------1                1         S2                2         z3                7         G4                11        F5                17        I

หมายเหตุ:หมายเลขรหัสประจำตัวคอลัมน์ถูกสร้างขึ้นเพื่อให้ใบสั่งเดียวกันเป็นของCol1. อย่างไรก็ตาม แทรกลงในไม่รับประกันใบสั่งมีอยู่จริงของรหัสอย่างใดอย่างหนึ่ง หรือCol1ในNewTable. เมื่อต้องการดึงข้อมูลในใบสั่งที่ต้องการใช้งาน อนุประโยคใบสั่ง BY จำเป็นตามที่แสดงตามคำสั่ง SELECT:
SELECT * from NewTable ORDER BY ID
รหัสประจำตัว @@ identity sql เรียงลำดับเลือกแทรก

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 273586 - การตรวจสอบครั้งสุดท้าย: 12/05/2015 21:44:32 - ฉบับแก้ไข: 1.0

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbhowto kbinfo kbpending kbmt KB273586 KbMtth
คำติชม