2010-10-04 31 views
14

Tôi có bảng bắt nguồn từ hệ thống cũ cũ, trong trường hợp có trạng thái senstive, cụ thể là cột trạng thái trong đó 's' = 'Lịch nhập' và 'S' = ' Quản lý lịch biểu '. Bảng này cuối cùng làm cho theo cách của mình vào một cơ sở dữ liệu SQL Server 2000 mà tôi có thể truy vấn chống lại. Truy vấn của tôi tương đối đơn giản chỉ cần tính số lượng ...Truy vấn T-SQL bắt buộc phải phân biệt chữ hoa chữ thường trong MS

Select trans_type, count(1) from mytable group by trans_type 

Đây là nhóm tính cho 'S' cùng với số lượng 's'. Có cách nào để buộc một truy vấn được cap nhạy cảm? Tôi có quyền truy cập vào cả hai môi trường SQL Server 2000 và 2005 để chạy điều này, tuy nhiên có khả năng quản trị giới hạn trên máy chủ (vì vậy tôi không thể đặt thuộc tính máy chủ) ... Tôi đoán tôi có thể di chuyển dữ liệu đến địa phương của tôi và thiết lập một cái gì đó trên địa phương của tôi, nơi tôi có quyền truy cập đầy đủ vào các tùy chọn máy chủ, nhưng sẽ thích một giải pháp tsql.

+0

'thay đổi cơ sở dữ liệu your_database đối chiếu Latin1_General_CS_AS' – pascal

+1

SQL Server 2003 ?? Tôi chỉ biết 2000, 2005, 2008, 2008 R2 .... –

+0

Thật không may thiếu quyền để thay đổi bảng pascal, mặc dù tôi nghĩ rằng sẽ làm việc – Twelfth

Trả lời

25
select trans_type collate SQL_Latin1_General_CP1_CS_AS, count(*) 
from mytable 
group by trans_type collate SQL_Latin1_General_CP1_CS_AS 

Bạn có thể làm điều này với =, like, và các nhà khai thác khác. Lưu ý rằng bạn phải sửa đổi danh sách chọn vì bạn không còn nhóm theo trans_type, bây giờ bạn đang nhóm theo trans_type collate SQL_Latin1_General_CP1_CS_AS. Loại của một gotcha.

+0

Giải pháp tốt nhất tôi có thể nhìn thấy nếu nó hoạt động ... cảm ơn Ian Logged – Twelfth

1

Bạn có thể giới thiệu cột trans_type_ascii với giá trị ascii của nhóm trans_type và nhóm thay vào đó không? Hoặc bất kỳ cột nào khác bạn có thể sử dụng (isUpperCase) để phân biệt chúng.

+0

Cảm ơn Beth. Tôi không thể thay đổi bảng hiện có, nhưng tạo ra một bảng tạm thời và tải nó với các giá trị ascii ... mà có thể làm việc. Có những giá trị khác so với giá trị nhỏ trong bảng (T và t chẳng hạn) ... Tôi tự hỏi nếu một câu lệnh case có thể xử lý nó. Như mã psuedo, trường hợp khi gõ = 'T' thì trường hợp khi isuppercase (loại) = 1 thì 'T' khác 't'. Tôi sẽ cung cấp cho một thử anbd xem những gì xảy ra – Twelfth

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