2012-06-14 45 views
6

Ok Tôi đang sử dụng SQL Server 2008 và có trường bảng loại VARCHAR(MAX). Vấn đề là khi lưu thông tin bằng cách sử dụng Hibernate, nội dung của trường VARCHAR(MAX) sẽ bị cắt bớt. Tôi không thấy bất kỳ thông báo lỗi nào trên máy chủ ứng dụng hoặc máy chủ cơ sở dữ liệu.Trường Máy chủ SQL bị cắt bớt

Nội dung của trường này chỉ là một tệp văn bản thuần túy. Kích thước của tệp văn bản này là 383KB.

Đây là những gì tôi đã làm cho đến nay để khắc phục vấn đề này:

  1. Thay đổi lĩnh vực cơ sở dữ liệu từ VARCHAR(MAX) để văn bản và cùng vấn đề xảy ra.

  2. sử dụng SQL Server Profiler và tôi nhận thấy rằng toàn văn nội dung đang được
    nhận bởi máy chủ cơ sở dữ liệu, nhưng đối với một số lý do các hồ sơ bị đóng băng khi cố gắng để xem các SQL với vấn đề cắt ngắn. Như tôi đã nói, ngay trước khi nó bị đóng băng, tôi
    đã nhận thấy rằng nội dung tệp văn bản đầy đủ (383KB) đang được nhận, vì vậy có vẻ như rằng đó có thể là sự cố cơ sở dữ liệu.

Có ai gặp phải sự cố này trước đây không? Bất kỳ ý tưởng gì gây ra sự cắt xén này?

LƯU Ý: chỉ muốn đề cập đến rằng tôi chỉ đang đi vào SQL Studio và chỉ cần sao chép nội dung trường văn bản và dán nó vào Textpad. Đó là cách tôi nhận thấy nó bị cắt ngắn.

Xin cảm ơn trước.

+1

Một ý kiến ​​cho rằng không có gì để làm với câu trả lời của tôi: ngừng sử dụng Profiler. Thay vào đó hãy sử dụng theo dõi phía máy chủ. –

+0

@AaronBertrand Bạn có thể giải thích tại sao bạn tư vấn cho Profiler không? – Apostrofix

+1

@Apostrofix Vì Profiler có thể đưa máy chủ của bạn đến đầu gối. Vì vậy, có thể một dấu vết và do đó có thể mở rộng sự kiện, nhưng nó dễ dàng hơn nhiều để làm với Profiler. Từ [bài viết này] (http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events): 'SQL Server Profiler là một công cụ cần tránh trên các máy chủ sản xuất bận rộn, như được hiển thị bởi sự gia tăng gấp mười lần trong thời gian và giảm đáng kể thông lượng cho replay.' –

Trả lời

17

Vấn đề của bạn là bạn nghĩ rằng Management Studio sẽ giới thiệu cho bạn tất cả dữ liệu. Nó không. Chuyển đến Công cụ> Tùy chọn> Kết quả truy vấn> Máy chủ SQL. Nếu bạn đang sử dụng Results to Grid, thay đổi "Maximum Characters Retrieved" cho "Non XML data" (chỉ cần lưu ý rằng Results to Grid sẽ loại bỏ bất kỳ CR/LF nào). Nếu bạn đang sử dụng Kết quả thành Văn bản, hãy thay đổi "Số ký tự tối đa được hiển thị trong mỗi cột".

enter image description here

Bạn có thể bị cám dỗ để nhập hơn, nhưng tối đa bạn có thể trở lại trong vòng Management Studio là:

65535 for Results to Grid 
8192 for Results to Text 

Nếu bạn thực sự muốn xem tất cả các dữ liệu trong Management Studio, bạn có thể thử chuyển đổi nó sang XML, nhưng điều này cũng có vấn đề. Đầu tiên đặt kết quả thành lưới> dữ liệu XML thành 5 MB hoặc không giới hạn, sau đó thực hiện:

SELECT CONVERT(XML, column) FROM dbo.table WHERE... 

Bây giờ điều này sẽ tạo ra kết quả lưới nơi liên kết thực sự có thể nhấp. Điều này sẽ mở một cửa sổ trình soạn thảo mới (nó sẽ không phải là một cửa sổ truy vấn, do đó sẽ không có các nút thực thi, IntelliSense, v.v.) với dữ liệu của bạn được chuyển đổi thành XML. Điều này có nghĩa là nó sẽ thay thế > bằng > v.v.Dưới đây là một ví dụ nhanh:

SELECT CONVERT(XML, 'bob > sally'); 

Kết quả:

enter image description here

Khi bạn bấm vào lưới, bạn sẽ có cửa sổ mới này:

enter image description here

(Nó loại có IntelliSense, xác thực định dạng XML, đó là lý do tại sao bạn nhìn thấy hình thu nhỏ.)

LẠI TẠI RANCH

Nếu bạn chỉ muốn kiểm tra sự tỉnh táo và không thực sự muốn sao chép tất cả 383K nơi khác, sau đó không! Chỉ cần kiểm tra bằng cách sử dụng:

SELECT DATALENGTH(column) FROM dbo.table WHERE... 

Điều này sẽ cho bạn biết rằng dữ liệu của bạn đã được cơ sở dữ liệu thu thập và vấn đề là công cụ và phương pháp xác minh của bạn.

(tôi đã kể từ khi viết a tip about this here.)

+0

Có, bạn đã đúng. Tôi đã có kết quả mặc định để Grid. Vâng, tôi nhận ra điều này sau khi tôi phải viết một chương trình giả để đọc từ cơ sở dữ liệu và viết trường đó vào một tệp. Cảm ơn bạn rất nhiều, lần đầu tiên tôi gặp phải vấn đề này. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')' không thành công với 'phân tích cú pháp XML: dòng 1, ký tự 6, ký tự tên bất hợp pháp'. Bạn có thể sử dụng 'SELECT 'bob & sally' FOR XML PATH ('')' nhưng nó cho 'bob & sally'. Tôi thích 'SELECT 'bob & sally' AS [xử lý-hướng dẫn (x)] CHO XML PATH ('')' để tránh entitisation. –

+0

@Martin điểm tốt, khi tôi sử dụng XML theo cách này nó thường là một phím tắt để di chuyển nhiều chuỗi cơ bản hơn đến cửa sổ trên cùng. –

1

hãy thử sử dụng SELECT * FROM dbo.table for XML PATH

Các vấn đề liên quan