Bạn đã sử dụng SET TEXTSIZE
chưa để giới hạn dữ liệu được trả về bởi một truy vấn, nhưng nhận thấy rằng nó dường như không hoạt động? Bạn nhận thấy rằng SELECT
của bạn các truy vấn tiếp tục trả về toàn bộ lượng văn bản, bất kể TEXTSIZE
giá trị?
Đọc tiếp. Bạn có thể mắc phải một sai lầm rõ ràng này.
Khi tôi gặp TEXTSIZE
lần đầu tiên tùy chọn, tôi quyết định chạy thử nghiệm nhanh. Nhưng nó không hoạt động. Tôi đã thử nhiều lần với các TEXTSIZE
khác nhau nhưng dường như không có gì hoạt động.
"Tại sao nó không hoạt động?" Tôi tự hỏi.
Nhưng sau đó nó đã nhấp. Tôi đọc lại tài liệu và nhận ra rằng tôi đang không sử dụng kích thước chuỗi chính xác cho các loại dữ liệu của mình.
TEXTSIZE
chỉ hoạt động trên các loại dữ liệu sau:
- varchar (tối đa)
- nvarchar (tối đa)
- varbinary (tối đa)
- văn bản
- ntext
- hình ảnh
Nếu bạn nhìn vào ba đầu tiên, hãy nhận thấy chúng sử dụng max
cho đối số. Điều này có nghĩa là họ sử dụng chuỗi / kích thước lưu trữ tối đa.
Tôi đang thử nghiệm nó với các cột thuộc loại nvarchar (100) , varchar (255) , v.v. Không có gì ngạc nhiên khi nó không hoạt động.
Ví dụ
Đây là một ví dụ để chứng minh ý tôi muốn nói.
Kiểm tra SỬ DỤNG; DROP TABLE NẾU TỒN TẠI TextSizeTest; TẠO BẢNG TextSizeTest (varchar50 varchar (50), varcharMax varchar (max), nvarcharMax nvarchar (max)); CHÈN VÀO TextSizeTestVALUES ('Quả thanh long', 'Quả thanh long', 'Quả thanh long'); ĐẶT TEXTSIZE 4; CHỌN * TỪ TextSizeTest;
Kết quả:
+ ------------- + -------------- + --------------- + | varchar50 | varcharMax | nvarcharMax || ------------- + -------------- + --------------- || Quả thanh long | Kéo | Tiến sĩ | + ------------- + -------------- + --------------- +Ở đây, tôi đặt
TEXTSIZE
giá trị thành4
, nhưng toàn bộ văn bản củavarchar(50)
cột còn nguyên. Cột này không bị ảnh hưởng bởiSET TEXTSIZE
. Và đó chính xác là cách nó phải hoạt động.Chỉ hai cột khác bị ảnh hưởng vì chúng là
varchar(max)
vànvarchar(max)
tương ứng.Ngoài ra, lý do nvarchar cột ngắn hơn varchar là do nó sử dụng hai byte cho mỗi ký tự (so với varchar ‘S một byte cho mỗi ký tự).
Vì vậy, nếu bạn đang gặp sự cố với
SET TEXTSIZE
, hãy kiểm tra loại dữ liệu của bạn.