Справка по SQL-серверу - PullRequest
       12

Справка по SQL-серверу

0 голосов
/ 15 декабря 2009

Я передаю список почтовых индексов хранимому процессу (скажем, 11111, 11112, 11113, 11114, 11115), а таблица почтовых индексов содержит всего несколько строк (скажем, 11111, 11112, 11113), и теперь я хочу написать запрос, который возвращает почтовые индексы, которых нет в таблице (11114 и 11115)

Может ли кто-нибудь помочь мне написать такой запрос?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 15 декабря 2009

Не зная вашей точной реализации, этот быстрый и грязный запрос должен быть адаптирован к тому, что вы пытаетесь. Выберите из списка, который вы пропустили, почтовые индексы, которых нет в полной таблице почтовых индексов:

SELECT ZipCode 
FROM PassedList 
WHERE ZipCode NOT IN (
  SELECT DISTINCT ZipCode
  FROM ZipCodeTable
)
0 голосов
/ 15 декабря 2009

Нет необходимости создавать таблицу в SQL, использовать временную таблицу в хранимой процедуре. Если вам нужно передать почтовые индексы в виде строки, используйте это. Если у вас есть параметр с табличным значением, вы можете передать его в виде таблицы.

    CREATE PROCEDURE spCheckZip
@Zips varchar(256)  --space delimited list of zips

AS

IF OBJECT_ID('tempdb..#ZipCheck') IS NOT NULL 
    DROP TABLE #ZipCheck
CREATE TABLE #ZipCheck (zipcode string) --Note string not int for zips with leading 0's.

IF CharIndex(' ',@Zips) > 1
BEGIN

   Declare @StartPos as int
   Declare @ZipCd As Varchar(16)

   set @StartPos = 2
   set  @ZipCd = substring(@Zips,1,CharIndex(',',@Zips))
   WHILE @StartPos > 1 and @StartPos < Len(@Zips)
   BEGIN
      INSERT Into #ZipCheck (zipcode) 
      SELECT Substring(@ZipCd,1,len(@ZipCd)-1)
      SET @StartPos = charindex(',',@Zips, @StartPos)+1
      SET @ZipCd = substring(@Zips,@StartPos,CharIndex(',',@Zips))
   END
END

SELECT ZipCode 
FROM ZipCheck LEFT JOIN YourZipTable on ZipCheck.zipcode=YourZipTable.YourZipField
WHERE YourZipTable.YourZipField IS NULL
0 голосов
/ 15 декабря 2009

Эта статья использует CTE, чтобы взять вашу строку записей, преобразовать в таблицу, чтобы вы могли включить ее в запрос: http://www.sqlservercentral.com/articles/CTE/67974/

0 голосов
/ 15 декабря 2009

Вы используете JOIN для создания первого запроса.

Теперь вам нужно ПРАВИЛЬНОЕ СОЕДИНЕНИЕ / ГДЕ, чтобы включить все элементы в ваш список zip, соответствующая запись которых в таблице zip равна null

РЕДАКТИРОВАТЬ: Вот образец

CREATE TABLE ZipCodesTable(Code int NOT NULL)
CREATE TABLE ZipCodesList (Code int NOT NULL)

INSERT INTO ZipCodesTable (Code) VALUES (11111)
INSERT INTO ZipCodesTable (Code) VALUES (11112)
INSERT INTO ZipCodesTable (Code) VALUES (11113)

INSERT INTO ZipCodesList  (Code) VALUES (11111)
INSERT INTO ZipCodesList  (Code) VALUES (11112)
INSERT INTO ZipCodesList  (Code) VALUES (11113)
INSERT INTO ZipCodesList  (Code) VALUES (11114)
INSERT INTO ZipCodesList  (Code) VALUES (11115)

SELECT ZipCodesList.Code
  FROM ZipCodesTable RIGHT
  JOIN ZipCodesList
    ON ZipCodesTable.Code = ZipCodesList.Code
 WHERE ZipCodesTable.Code IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...