2011-10-12 31 views
10

Tôi đã tự hỏi nếu có một cách để lưu trữ dấu ngoặc kép trong SQL Server 2008. Tôi đang xây dựng một số báo cáo và tất cả các báo cáo này là chính xác, ngoại trừ chúng chỉ khác nhau các mã tôi đang chọn. Ví dụ: một báo cáo sử dụng mã 'abc', 'def', 'ghi' và một báo cáo khác sử dụng mã 'jkl', 'mno', 'pqr'. Tôi đã suy nghĩ để giảm số lượng các thủ tục lưu trữ tôi sẽ phải thực hiện, tôi có thể thực hiện một tham số trên báo cáo để chọn loại báo cáo để chạy. Dựa trên đó, tôi sẽ sử dụng các mã chính xác. Vì vậy, tôi sẽ lưu trữ các mã này trong một biến varchar. Dưới đây là chức năng tôi đã hy vọng:Lưu trữ dấu nháy đơn trong biến varchar SQL Server 2008

DECLARE @codes1 varchar, @codes2 varchar 
SET @codes1 = ''abc', 'def', 'ghi'' 
SET @codes2 = ''jkl', 'mno', 'pqr'' 

Sau đó, tôi sẽ sử dụng biến varchar thích hợp dựa trên tham số mà người dùng chọn. Vấn đề duy nhất là thiết lập các biến vì chuỗi sẽ có dấu nháy đơn trong nó (chuỗi sẽ được sử dụng trong câu lệnh SQL 'IN', đó là lý do cho các dấu nháy đơn hiện diện).

Trả lời

18

Như thế này. Có Oded là chính xác. Thuật ngữ thích hợp cho việc này là 'thoát'. Bạn có thể thoát khỏi một dấu ngoặc đơn ' bằng cách tăng gấp đôi nó lên ''

DECLARE @codes1 varchar(50), @codes2 varchar(50) 
SET @codes1 = '''abc'', ''def'', ''ghi''' 
SET @codes2 = '''jkl'', ''mno'', ''pqr''' 
+1

Aka, thoát đơn '' 'bằng cách nhân đôi nó '' ''. – Oded

+2

Bạn cũng cần độ dài trong các khai báo biến để tránh cắt ngắn ở 1 ký tự. –

+0

Cảm ơn! Đây chính xác là những gì tôi cần! Ngoài ra, cảm ơn @Martin cho nhận xét đã thêm! Tôi cũng cần điều này! –

0

Cố gắng tránh các giá trị mã hóa cứng. Tạo một bảng để giữ các giá trị này cùng với một cách để nhóm chúng lại.

Table CodeGroups 
GroupNumber | Codes 
     1 | abc 
     1 | def 
     1 | ghi 
     2 | kkl 
     2 | mno 
     2 | pqr 

Bằng cách này, người dùng chỉ phải chọn GroupNumber = 1

Bạn liên kết bảng CodeGroups để bàn với các chuỗi mã. Tất cả những gì bạn phải làm để thêm một mã khác là tạo một mục nhập trong bảng này và cung cấp cho nó một số nhóm.

0

Tránh vấn đề qoute đơn lẻ chỉ bằng cách tăng gấp đôi nó.

Giá trị Varchar2 (10): = '' abc ''; --- Bạn sẽ gặp lỗi.

Biến thể giá trị (10): = '' 'abc' ''; --- Sẽ giải quyết vấn đề của bạn.

0
      int varId = "1"; 
          String varItem = "Google's root"; 

          String strSQL = "INSERT INTO table(" 
              + "id," 
              + "item" 
              +")" 
              + "VALUES('" + varId 
              + "', '" + varItem 
              + "')"; 
+0

OP được đề cập bằng cách sử dụng SQL Server 2008 - là giải pháp của bạn nhằm làm việc với SQL Server 2008? Ngoài ra, nó sẽ xử lý bạn để cung cấp một giải thích về giải pháp của bạn ở trên nó. –

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