Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng SET TEXTSIZE để giới hạn dữ liệu được trả về cho mỗi hàng trong SQL Server

Trong SQL Server, SET TEXTSIZE câu lệnh chỉ định kích thước của varchar (max) , nvarchar (tối đa) , varbinary (max) , văn bản , ntext hình ảnh dữ liệu được trả về bởi một SELECT tuyên bố.

Microsoft khuyên rằng văn bản , ntext hình ảnh sẽ bị xóa trong phiên bản SQL Server trong tương lai, vì vậy bạn nên tránh sử dụng các loại dữ liệu này trong công việc phát triển mới và lên kế hoạch sửa đổi các ứng dụng hiện đang sử dụng chúng để sử dụng varchar (max) , nvarchar (tối đa) hoặc varbinary (max) thay vào đó.

Ví dụ 1 - Cách sử dụng cơ bản

Đây là một ví dụ về cách đặt TEXTSIZE giá trị.

 ĐẶT TEXTSIZE 2048; 

Điều đó đặt TEXTSIZE đến 2048 byte.

Ví dụ 2 - Kiểm tra Giá trị TEXTSIZE

Bạn có thể kiểm tra TEXTSIZE hiện tại giá trị bằng @@TEXTSIZE :

 CHỌN @@ TEXTSIZE AS [Kích thước văn bản]; 

Kết quả:

 + ------------- + | Kích thước văn bản || ------------- || 2048 | + ------------- + 

Ví dụ 3 - Nó ảnh hưởng như thế nào đến Kết quả Truy vấn

Dưới đây là một ví dụ minh họa cách TEXTSIZE giá trị có thể ảnh hưởng đến kết quả trả về trong SELECT truy vấn.

Trước tiên, hãy tạo một bảng, chèn một số văn bản, sau đó chọn nó.

 SỬ DỤNG Kiểm tra; 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'); CHỌN * TỪ TextSizeTest; 

Kết quả (bình thường):

 + ------------- + -------------- + --------------- + | varchar50 | varcharMax | nvarcharMax || ------------- + -------------- + --------------- || Quả thanh long | Quả thanh long | Quả thanh long | + ------------- + -------------- + --------------- +  

Đây là những gì chúng tôi thường mong đợi. Nó trả về toàn bộ văn bản bên trong mỗi cột vì mỗi hàng văn bản chiếm ít hơn 2048 byte (đó là những gì tôi đặt TEXTSIZE trong ví dụ trước).

Nhưng đây là điều sẽ xảy ra nếu tôi giảm TEXTSIZE giá trị:

 SET TEXTSIZE 4; CHỌN * TỪ TextSizeTest; 

Kết quả:

 + ------------- + -------------- + --------------- + | varchar50 | varcharMax | nvarcharMax || ------------- + -------------- + --------------- || Quả thanh long | Kéo | Tiến sĩ | + ------------- + -------------- + --------------- +  

Cột đầu tiên không bị ảnh hưởng vì nó không phải là cột "tối đa". Ý tôi là, đó là varchar (50) chứ không phải varchar (max) . TEXTSIZE tùy chọn chỉ ảnh hưởng đến các cột được xác định bằng max .

Cột thứ hai trả về bốn ký tự đầu tiên. Điều này là do chúng tôi đặt TEXTSIZE giá trị thành 4 và bốn ký tự đầu tiên đang sử dụng 4 byte.

Cột thứ ba chỉ trả về 2 ký tự đầu tiên. Điều này là do đó là nvarchar cột. Trong trường hợp này, hai ký tự đầu tiên sử dụng 4 byte.

Ví dụ 4 - Đặt lại giá trị

Một điều cần lưu ý là chỉ định SET TEXTSIZE 0 thực sự "đặt lại" nó về giá trị mặc định là 4096.

 ĐẶT TEXTSIZE 0; CHỌN @@ TEXTSIZE NHƯ [@@ TEXTSIZE]; CHỌN * TỪ TextSizeTest; 

Kết quả:

 + -------------- + | @@ TEXTSIZE || -------------- || 4096 | + -------------- + (1 hàng bị ảnh hưởng) + ------------- + ------------ - + --------------- + | varchar50 | varcharMax | nvarcharMax || ------------- + -------------- + --------------- || Quả thanh long | Quả thanh long | Quả thanh long | + ------------- + -------------- + --------------- + (1 hàng bị ảnh hưởng) 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể chèn giá trị rõ ràng cho cột nhận dạng trong bảng 'bảng' khi IDENTITY_INSERT được đặt thành TẮT

  2. Tìm hiểu cách Thực hiện Phân tích Sản phẩm với Tìm kiếm Toàn văn của Máy chủ SQL. Phần 2

  3. Hợp nhất các khoảng ngày trùng lặp

  4. Chuyển đổi ‘time’ thành ‘smalldatetime’ trong SQL Server (Ví dụ T-SQL)

  5. Cách DB_NAME () hoạt động trong SQL Server