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

THIẾT LẬP TEXTSIZE không hoạt động trong SQL Server? Kiểm tra điều này.

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ành 4 , nhưng toàn bộ văn bản của varchar(50) cột còn nguyên. Cột này không bị ảnh hưởng bởi SET 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)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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi ‘datetime’ thành ‘date’ trong SQL Server (Ví dụ T-SQL)

  2. Hướng dẫn hoàn chỉnh để sửa lỗi cơ sở dữ liệu SQL 5243

  3. Sử dụng NEWID () để tạo giá trị duy nhất trong SQL Server

  4. Làm cách nào để khắc phục xung đột đối chiếu trong truy vấn SQL Server?

  5. UNION ALL có đảm bảo thứ tự của tập kết quả không