Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SP to get parameter (fulltext1) or (fulltext1, fulltext2) or (full%) or (empty)  [new]
sasha one
Member

Откуда:
Сообщений: 7
Привет всем.
Мне нужна ваша помощь

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

Скажем так, мне нужно найти все данные, где:
параметр 1: может быть (пустое значение) или (целое значение, например fulltext1) или (два значение через "," например fulltext1, fulltext2) или (часть из значения, например fulltex%, %text1)
параметр 2: может быть (пустое значение) или (целое значение, например fullname1) или (два значение через "," например fullname1, fullname2) или (часть из значения, например fullnam%, %name1)
+ как писал раньше, один из параметров может быть пустым (empty) или пуcтые оба. В таком случае показать все строки.

Вот сама процедура:
USE [db_name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create procedure [dbo].[Get_Raw_Data_History]
@User_Name varchar (255) = null
,@Host_Name varchar (255) = null
,@enable_front_wildcard bit = 1
,@enable_back_wildcard bit = 1
as
begin
if @enable_front_wildcard = 0
then
begin
set @User_Name = '%' + @User_Name
set @Host_Name = '%' + @Host_Name
end
if @enable_back_wildcard = 0
then
begin
set @User_Name = @User_Name + '%'
set @Host_Name = @Host_Name + '%'
end
select top 10000 * from dbo.table1
where
([User_Name] like @User_Name) or ([User_Name] = isnull (@User_Name,[User_Name]))
and ([Host_Name] like @Host_Name) or ([Host_Name] = isnull (@Host_Name,[Host_Name]))
order by [Time_Stamp]
END

Показывает следующую ошибку:
Msg 156, Level 15, State 1, Procedure Get_Raw_Data_History, Line 10
Incorrect syntax near the keyword 'then'.
Msg 156, Level 15, State 1, Procedure Get_Raw_Data_History, Line 16
Incorrect syntax near the keyword 'then'.

Помогите пожалуйста
27 дек 12, 23:33    [13697918]     Ответить | Цитировать Сообщить модератору
 Re: SP to get parameter (fulltext1) or (fulltext1, fulltext2) or (full%) or (empty)  [new]
sasha one
Member

Откуда:
Сообщений: 7
Забыл добавить...
версия сервера: Microsoft SQL Server 2005 - 9.00.5069.00 (Intel X86)
Aug 22 2012 16:01:52
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Спасибо
27 дек 12, 23:36    [13697926]     Ответить | Цитировать Сообщить модератору
 Re: SP to get parameter (fulltext1) or (fulltext1, fulltext2) or (full%) or (empty)  [new]
sasha one
Member

Откуда:
Сообщений: 7
+ был вариант написать так:
USE [db_name]
GO
/****** Object: StoredProcedure [dbo].[H_Get_Raw_Data_History] Script Date: 12/27/2012 9:37:52 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[H_Get_Raw_Data_History]
@User_Name varchar (255) = null
,@Host_Name varchar (255) = null
as
select top 1000 * from dbo.table1

where [User_Name] in
(select * from dbo.Split(@User_Name)) or ([User_Name] = isnull (@User_Name,[User_Name])) or ([User_Name] like ('%' + @User_Name + '%'))
or [Host_Name] in
(select * from dbo.Split(@Host_Name)) or ([Host_Name] = isnull (@Host_Name,[Host_Name])) or ([Host_Name] like ('%' + @Host_Name + '%'))
27 дек 12, 23:39    [13697935]     Ответить | Цитировать Сообщить модератору
 Re: SP to get parameter (fulltext1) or (fulltext1, fulltext2) or (full%) or (empty)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
sasha one
Показывает следующую ошибку:
Msg 156, Level 15, State 1, Procedure Get_Raw_Data_History, Line 10
Incorrect syntax near the keyword 'then'.
Просто в сиквеле нету такой конструкции: if ... then ...

Посмотрите справку по if
27 дек 12, 23:45    [13697953]     Ответить | Цитировать Сообщить модератору
 Re: SP to get parameter (fulltext1) or (fulltext1, fulltext2) or (full%) or (empty)  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
sasha one,

Делаете себе табличную функцию парсинга строки по разделителю (на форуме завались вариантов). Тогда ваша простыня сведется к элементарному:
select top 10000 * from dbo.table1 t
where
 exists(select * from dbo.SplitString(@UserName, ',') s where t.[User_Name] like isnull(s.value, t.[User_Name]) and
 exists(select * from dbo.SplitString(@HostName, ',') s where t.[Host_Name] like isnull(s.value, t.[Host_Name])
order by [Time_Stamp]
28 дек 12, 00:39    [13698067]     Ответить | Цитировать Сообщить модератору
 Re: SP to get parameter (fulltext1) or (fulltext1, fulltext2) or (full%) or (empty)  [new]
sasha one
Member

Откуда:
Сообщений: 7
USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[Get_Raw_Data_History]    Script Date: 12/30/2012 11:26:33 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[proc1]
	 @User_Name varchar (255) = null
	 ,@Host_Name varchar (255) = null
select * from dbo.table1
where ([User_Name] in 
(select * from dbo.Split(@User_Name)) or ([User_Name] = isnull (@User_Name,[User_Name])) or ([User_Name] like ('%' + @User_Name + '%')))
and ([Host_Name] in
(select * from dbo.Split(@Host_Name)) or ([Host_Name] = isnull (@Host_Name,[Host_Name])) or ([Host_Name] like ('%' + @Host_Name + '%')))
...

разобрался.

Может кому нибудь понадобиться...

invm, спасибо за совет.
31 дек 12, 02:07    [13710478]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить