Có một số cách để thực hiện điều này:
-
SQL động, như được chỉ ra trong bài viết này: http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
-
Chỉ định từng mục trong các biến (điều này có thể trở nên khá xấu nếu bạn có nhiều 'chúng):
@ var1 varchar (20), @ var2 varchar (20), @ var3 varchar (20)
-
Viết hàm split để biến chuỗi thành biến bảng, có rất nhiều biến ngoài đó. Đây là mục yêu thích của cá nhân tôi: http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting /
-
Sử dụng Tham số giá trị bảng (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
Đây là một mẹo nhỏ khi sử dụng CHARINDEX (lưu ý rằng cách tiếp cận này là Non-Sargable):
Chuỗi của bạn giống như sau:'abc, def'
Sử dụng CHARINDEX
, bạn chèn cả chuỗi tìm kiếm và giá trị bạn muốn tìm trong chuỗi tìm kiếm bằng máy đo mê cung của bạn. Vì vậy, bằng cách sử dụng ví dụ nhỏ của tôi, chuỗi sẽ trở thành ', abc, def,' Chú ý thêm dấu phẩy ở đầu và cuối. Sau đó, làm điều tương tự với dữ liệu trường. Nếu bạn có dấu phẩy trong dữ liệu của mình, bạn sẽ phải hoán đổi từ mê sảng sang một thứ gì đó khác, như ký tự (2) hoặc dấu chấm phẩy, hoặc bất cứ điều gì.
Sau đó, để thực hiện tìm kiếm:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
Phần đệm mê sảng ngăn không cho tìm kiếm tìm thấy "abcabc" nhưng sẽ tìm thấy "abc", đối sánh chính xác.
Nếu bạn đang sử dụng 2005, tôi sẽ lấy một chức năng chia rất nhanh để bạn có thể tránh sử dụng SQL động.