Hành vi c?a các ch?c năng nh?n d?ng khi s? d?ng v?i ch?n vào ho?c CHÈN. CH?N truy v?n có ch?a m?t l?nh b?ng m?nh đ?

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 273586 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Khi b?n s? d?ng m?t ch?n vào truy v?n v?i các DANH TÍNH ch?c năng và m?t tr?t t? c?a m?nh đ?, các giá tr? danh tính đư?c t?o ra không đư?c b?o đ?m đ? có theo th? t? theo th? t? đư?c cung c?p b?i đ?t hàng c?a kho?n này. Ví d?, n?u các DANH TÍNH ch?c năng b?t đ?u v?i m?t h?t gi?ng s? 1 và gia s? 1, hàng đ?u trong thi?t l?p ra l?nh cho k?t qu? có th? có m?t giá tr? khác nhau hơn 1, và hàng th? hai có th? có m?t giá tr? khác nhau hơn 2, và vv.Trong khi các đ?t hàng có th? xu?t hi?n như b?n mong đ?i, hành vi không đư?c b?o đ?m. S? hi?n di?n c?a TOP ho?c SET ROWCOUNT c?ng không b?o đ?m tr?t t? c?a các hàng.

N?u b?n mu?n các DANH TÍNH các giá tr? đ? đư?c ch? đ?nh trong m?t th?i trang tu?n t? theo th? t? t?i kho?n t? do này, t?o ra m?t b?ng có ch?a m?t c?t v?i các DANH TÍNH b?t đ?ng s?n và sau đó ch?y m?t CHÈN... CH?N... Th? t? b?i query cư b?ng này.

THÔNG TIN THÊM

Các giá tr? danh tính đư?c t?o ra ph? thu?c vào v? trí c?a các GetIdentity() ch?c năng trong truy v?n cây (showplan), có th? thay đ?i do đ? t?i ưu hóa thay đ?i, k? ho?ch truy v?n song song hay s? hi?n di?n c?a TOP/SET ROWCOUNT. Trong khi b?n có th? xem t?nh hu?ng trong đó m?t ch?n vào v?i m?t DANH TÍNH ch?c năng và m?t tr?t t? do kho?n s?n xu?t các giá tr? trong m?t đơn đ?t hàng mà b?n mong mu?n hành vi này không đ?m b?o và có th? thay đ?i mà không có c?nh báo. Các k?ch b?n sau đây liên quan đ?n m?t CH?N thành tuyên b? và m?t DANH TÍNH ch?c năng.

Xem xét m?t b?ng mà đư?c đ?t tên theo OldTable v?i các giá tr? sau đây.
Col1      Col2
-------   --------
1         A          
11        F 
7         G          
17        I          
2         Z          

K?ch b?n 1

Trong trư?ng h?p này, các truy v?n ch?n vào s? d?ng m?t ch?c năng nh?n d?ng và m?t tr?t t? c?a kho?n này.
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
NewTable có th? đư?c chèn vào v?i các hàng trong m?t trong hai sau cách.

Phương pháp 1

Col1      Col2       ID
-------   --------   --------
1         A          4
2         Z          2
7         G          5
11        F          3
17        I          1
B?n có th? nh?n th?y r?ng giá tr? danh tính r?ng máy ch? SQL t?o ra không ph?i là theo th? t? như đơn đ?t hàng c?a c?t)Col1) trong truy v?n.

Phương pháp 2

Col1     Col2       ID
-------  --------   -------
1        A          1
2        Z          2
7        G          3
11       F          4
17       I          5
Trong trư?ng h?p này, b?n có th? nh?n th?y r?ng danh tính giá tr? đó SQL Máy ch? t?o ra là chính xác theo th? t? như đơn đ?t hàng c?a c?t ()Col1) trong truy v?n. Tuy nhiên, đi?u này là do s? ngâu h?p và không ph?i các b?o đ?m tr?t t?, b?n s? nh?n đư?c m?i khi truy v?n đư?c đi?u hành.

K?ch b?n 2

Các sau ch?n vào truy v?n s? d?ng ch?c năng nh?n d?ng và m?t Th? t? c?a kho?n, v?i m?t nhà đi?u hành hàng đ?u ho?c m?t tuyên b? SET ROWCOUNT.
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
- hay -
SET ROWCOUNT 3
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
NewTable có th? đư?c chèn vào v?i các hàng trong m?t trong ba t?t sau cách:

Phương pháp 1

Col1   Col2   ID
-----  -----  -----
1      A      2
2      Z      1
7      G      3
Trong trư?ng h?p này, b?n có th? th?y r?ng danh tính giá tr? đó SQL Server t?o ra không ph?i là theo th? t? như đơn đ?t hàng c?a c?t ()Col1) trong truy v?n.

Phương pháp 2

Col1    Col2     ID
------  ------   ------
1       A        1
2       Z        2
7       G        3
Trong trư?ng h?p này, b?n có th? nh?n th?y r?ng danh tính giá tr? đó SQL Máy ch? t?o ra là chính xác trong theo th? t? như đơn đ?t hàng c?a c?t ()Col1) trong truy v?n. Tuy nhiên, đi?u này là do s? ngâu h?p và không ph?i các b?o đ?m tr?t t?, b?n s? nh?n đư?c m?i khi truy v?n đư?c đi?u hành.

Phương pháp 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      G       5
Trong trư?ng h?p này, giá tr? danh tính SQL Server t?o ra không ph?i theo th? t? như đơn đ?t hàng c?a c?t)Col1) trong truy v?n. Ngoài ra, các d? li?u đư?c đưa vào không đáp ?ng các H?t gi?ng và tăng các yêu c?u quy đ?nh t?i các ch?c năng nh?n d?ng trong truy v?n (H?T GI?NG = 1, TĂNG = 1).

Trên th?c t?, các DANH TÍNH ch?c năng t?o ra danh tính giá tr? đúng d?a trên các h?t gi?ng và tăng tham s?. Tuy nhiên, th? h? giá tr? danh tính x?y ra trư?c khi các hàng đư?c s?p x?p d?a trên các Th? t? c?a kho?n này. V? v?y, khi b?n s? d?ng m?t nhà đi?u hành hàng đ?u ho?c m?t ROWCOUNT SET tuyên b?, các hàng l?p vào k?t qu? b?ng)NewTable) dư?ng như có giá tr? không chính xác nh?n d?ng. Các giá tr? danh tính SQL Máy ch? t?o ra có th? không phù h?p v?i các tham s? h?t gi?ng và tăng c?a các DANH TÍNH ch?c năng.

Đây là m?t ví d? liên quan đ?n m?t CHÈN vào ch?n t? v?i th? t? c?a kho?n này.

Xem xét m?t b?ng đư?c đ?t tên OldTable v?i các giá tr? sau:
Col1      Col2
-------   --------
1         S          
11        F 
7         G          
17        I
2         z


Dư?i đây là b?ng m?c tiêu đ?t tên NewTable (ID là m?t c?t danh tính)
ID (identity)    Col1     Col2
---------------    -------   ------


Truy CHÈN vào ch?n t? v?n sau đây v?i m?t đơn đ?t hàng c?a kho?n s? đ?m b?o r?ng c?t ID trong NewTable là theo th? t? như 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

Chú ý ID b?n s?c c?t đư?c t?o ra đ? có theo th? t? như c?a Col1. Tuy nhiên, CHÈN vào không đ?m b?o tr?t t? v?t l? c?a m?t trong hai ID ho?c Col1 trong NewTable. Truy xu?t d? li?u theo th? t? mong mu?n, m?t tr?t t? c?a kho?n là c?n thi?t như đư?c hi?n th? b?ng cách làm theo tuyên b? ch?n:
SELECT * from NewTable ORDER BY ID

Thu?c tính

ID c?a bài: 273586 - L?n xem xét sau cùng: 22 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • 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
T? khóa: 
kbhowto kbinfo kbpending kbmt KB273586 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:273586

Cung cấp Phản hồi

 

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