Tôi có một bảng thông báo chứa trường id tin nhắn, trường id ngôn ngữ và trường văn bản. Ứng dụng cần hiển thị thông báo dựa trên id và ngôn ngữ cùng nhau tạo thành khóa duy nhất. Tất cả các tin nhắn tồn tại cho ngôn ngữ EN
, nhưng không phải tất cả đã được dịch sang các ngôn ngữ khác. Vì vậy, đối với tiếng Anh sẽ luôn có một bản ghi được chọn. Nhưng nếu người dùng là tiếng Pháp và ứng dụng cần hiển thị thông báo số 17 và nó chưa tồn tại đối với tiếng Pháp, tôi muốn trả lại thông điệp # 17 trong EN
. Tôi muốn thực hiện điều này trong một truy vấn SELECT
, tốt nhất là không có IF
Báo cáo.Máy chủ SQL: cách trả về 1 hàng mặc định nếu điều kiện không đáp ứng
CHỈNH SỬA: dựa trên câu trả lời được gửi - cần phải làm rõ rằng mọi thông điệp được dịch sang khoảng 10 ngôn ngữ, có thể nhiều hơn. có nên luôn là chính xácmột hàng được trả lại dựa trên id thư và id lang. nhưng nếu hàng đó không tồn tại, tin nhắn tiếng Anh phải được trả về.
Mã cuối cùng:
declare @msgid int=2, @langid varchar(2)='fr' SELECT isnull(xx.msg, en.msg) msgtext FROM appmessages en LEFT JOIN appmessages xx ON en.msgid = xx.msgid and [email protected] WHERE en.langid = 'en' and [email protected]
vui lòng xem Chỉnh sửa của tôi. cần giải pháp nơi lang không được mã hóa cứng – lvk
@lkjp Làm thế nào để bạn biết ngôn ngữ nào bạn muốn? Bạn có thể thay thế 'tiếng Pháp' bằng tham số và gọi mọi thứ theo cách đó 'AND fr.language = @ primary' – ChrisStillwell
Cảm ơn. đó là những gì tôi đang tìm kiếm. – lvk