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

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 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 	NewTable
FROM 	OldTable
Order By Col1
NewTableอาจถูกแทรก ด้วยแถวในสองวิธีต่อไปนี้อย่างใดอย่างหนึ่ง

วิธีที่ 1:

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

วิธีที่ 2

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

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

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

วิธีที่ 1:

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

วิธีที่ 2

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

วิธีที่ 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      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        I
2         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         S
2                2         z
3                7         G
4                11        F
5                17        I

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

คุณสมบัติ

หมายเลขบทความ (Article ID): 273586 - รีวิวครั้งสุดท้าย: 16 ตุลาคม 2553 - Revision: 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
Keywords: 
kbhowto kbinfo kbpending kbmt KB273586 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:273586

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com