Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL IN клауза в съхранена процедура

Има няколко начина да постигнете това:

  1. Динамичен SQL, както е посочено в тази статия:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html

  2. Посочете всеки елемент в променливи (това може да стане доста грозно, ако имате много от тях):

    @var1 varchar(20),@var2 varchar(20),@var3 varchar(20)

  3. Напишете функция за разделяне, за да превърнете низа в променлива на таблица, има много от тях. Това е моят личен фаворит:http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting/

  4. Използвайте параметър за стойност на таблица (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168

  5. Ето един малък трик с помощта на CHARINDEX (обърнете внимание, че този подход не е Sargable):

Вашият низ е така:'abc,def'

Използване на CHARINDEX , допълвате както низа за търсене, така и стойността, която искате да намерите в низа за търсене с вашия разделител. И така, използвайки моя малък пример, низът ще стане ',abc,def'. Забележете допълнителните запетаи в началото и края. След това направете същото с данните в полето. Ако имате запетаи във вашите данни, ще трябва да замените разделителя с нещо друго, като char(2), или точка и запетая, или каквото и да е друго.

След това, за да извършите търсенето:

WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0

Подпълването на разделителя не позволява търсенето да намери "abcabc", но ще намери "abc", точно съвпадение.

Ако използвате 2005, бих хванал наистина бърза функция за разделяне, така че да избегнете използването на динамичен SQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам каскадно изтриване със SQL Server?

  2. SQL не може да вмъкне изрична стойност за колона за идентичност в таблица „Таблица“, когато IDENTITY_INSERT е зададено на OFF

  3. Използвайте COLUMNPROPERTY() за връщане на информация за колона или параметър в SQL Server

  4. Как да замените NULL с празен низ в SQL?

  5. Производителност на Sql сървър и ред на полетата