Необходимо использовать переменную в строковой функции SQL Server - PullRequest
1 голос
/ 23 июня 2011

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

Я хотел бы использовать переменную в строке SQL Serverфункция.Вот пример кода:

declare @STR nvarchar(50)

set @STR = 'ceo'

SELECT
   Document_Text.DocText_ID,
   SUBSTRING(Document_Text.DocText, CHARINDEX(@STR, Document_Text.DocText)-125, 250) as SubText
FROM
   Document_Text
WHERE
   Document_Text.DocText like '%@STR%'

Как я описал выше, я в конечном итоге буду использовать результаты запроса в один столбец (~ 200 значений) вместо @STR в таком запросе.

С точки зрения приложения, рассмотрите следующее:

  • Document_Text содержит столбцы для UserID, DocID, DocURL и DocText - последний является текстовой формой резюме.STR - это короткое слово (а) запроса - nvarchar (50) - при поиске в нем (я знаю, что это может показаться не интуитивно понятным, как приложение для поиска, но есть другая форма обработки по принципу "точка-н-клик", использующая результатыэтого запроса, который «имеет смысл»).
  • Мой возможный запрос будет захватывать ключевые слова роли работы или функциональной области из одного столбца другой таблицы в той же базе данных.

Если у кого-то есть предложения для этого следующего шага, я был бы также признателен.Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 июня 2011
declare @STR nvarchar(50)

set @STR = 'ceo'

SELECT
   Document_Text.DocText_ID,
   SUBSTRING(Document_Text.DocText, CHARINDEX(@STR, Document_Text.DocText)-125, 250) as SubText
FROM
   Document_Text
WHERE
   Document_Text.DocText like '%'+@STR+'%'
OPTION (RECOMPILE)
0 голосов
/ 23 июня 2011
DECLARE   @Document_Text TABLE(UserID INT , DocText_ID INT , DocURL NVARCHAR(100),DocText NVarchar(4000))
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES (1,1,'Blah','Ceo blah blah blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (2,1,'Blah','blah blah blah blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (3,1,'Blah','blah blah Manager blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (4,1,'Blah','blah blah blah blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (5,1,'Blah','blah blah blah blah blah time time time') 
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (6,1,'Blah','Cblah blah blah blah blah time time time') 
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (7,1,'Blah','Cblah blah blah blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (8,1,'Blah','blah Ceo blah blah blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (9,1,'Blah','blah blah blah blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (10,1,'Blah','blah blah Programmer blah blah time time time' )
INSERT INTO @Document_Text (UserID , DocText_ID , DocURL,DocText) VALUES  (11,1,'Blah','blah blah blah blah blah time time time' )


DECLARE  @JobRole TABLE (JR_ID INT , JobRole NVARCHAR(50))
INSERT INTO @Jobrole (JR_ID , JobRole ) VALUES (1,'Programmer') 
INSERT INTO @Jobrole (JR_ID , JobRole ) VALUES (2,'Ceo') 
INSERT INTO @Jobrole (JR_ID , JobRole ) VALUES (3,'Manager') 



 SELECT
   JobRole,DT.DocText_ID,
   SUBSTRING(DT.DocText, CHARINDEX(JobRole, DT.DocText)-125, 250) as SubText
FROM
   @Document_Text DT CROSS JOIN  @JobRole JR 
WHERE
   DT.DocText like '%'+ JobRole +'%''

Я включил табличные переменные, чтобы вы могли видеть мое мышление.Это то, что ты искал.Он избегает курсоров, но я не знаю, насколько хорошо он будет масштабироваться.

...