Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
Помогите пожалуйста с хранимой процедурой для выбора фотографий с параметрами @Title, @Author, @KeyWords, @Tema, @Sign(знак "=","<=",">=" для указания условия поиска по дате добавления фотографии), @DateAdd(дата добавления фотографии).Таблица - Photos. Притом значения этих параметров могут быть заполнены все, а могут быть заполнены не все - в случайном порядке(По правде говоря в этом и заклучается трудность). Заранее благодарю всех кто мне помог.
23 дек 11, 13:11    [11814485]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
danatriel
Member

Откуда: Ростов-на-Дону
Сообщений: 176
А что значит в случайном порядке? Если я правильно понял, то может быть незаполненным любой параметр?
тогда в ХП делаешь обработку
if @param is null
begin
....
end

Так в чем проблема то?
23 дек 11, 13:17    [11814544]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
danatriel,

проблема в том что не составить сам select чтобы работал с этими параметрами
23 дек 11, 13:26    [11814664]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
danatriel
Member

Откуда: Ростов-на-Дону
Сообщений: 176
buriu,

опиши подробно таблицу
23 дек 11, 13:29    [11814702]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
buriu,

Переменное число критериев отбора в запросе
23 дек 11, 13:31    [11814723]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
точнее как включать эти параметры в самом select-e
23 дек 11, 13:31    [11814724]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
danatriel,

CREATE TABLE [dbo].[Photos](
[PhotosID] [int] IDENTITY(1,1) NOT NULL,
[Title] [varchar](128) NULL,
[Keyword] [varchar](128) NULL,
[DataOriginal] [varchar](24) NULL,
[AddData] [datetime] NOT NULL,
[Descriere] [varchar](512) NULL,
[Rezolutie] [varchar](3) NULL,
[DimX] [int] NULL,
[DimY] [int] NULL,
[DimFisier] [varchar](16) NULL,
[Photo] [image] NULL,
[PhotoCod] [varchar](16) NULL,
[Tema] [int] NULL,
[EventID] [int] NULL,
[AutorID] [varchar](3) NULL,
[IsPanorams] AS ([dbo].[IsPanorams]([DimX], [DimY])),
CONSTRAINT [PK_Photos] PRIMARY KEY CLUSTERED
23 дек 11, 13:37    [11814788]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
danatriel
Member

Откуда: Ростов-на-Дону
Сообщений: 176
buriu,

есть конечно идея, что первое пришло в голову:)
попробуй в коде ХП использовать составную строку

DECLARE @sql AS NVARCHAR(1000)

SET @sql='select * from tbl'
if условие1
begin 
 set @sql=@sql+'WHERE .....'
end 

if условие2
begin 
 set @sql=@sql+' AND'
end 
и т.п.
EXEC(@sql)


так не пойдет?
23 дек 11, 13:48    [11814888]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT *
FROM Photos
WHERE (@Title IS NULL OR [Title]=@Title)
  AND (@AutorID IS NULL OR [AutorID]=@AutorID)
  AND (@KeyWord IS NULL OR [Keyword]=@KeyWord
  AND (@Tema IS NULL OR [Tema]=@Tema)
  AND (@Sign IS NULL OR @Sign='=' AND [AddData]=@DateAdd OR @Sign='<=' AND [AddData]<=@DateAdd OR @Sign='>=' AND [AddData]>=@DateAdd)
Кто ж это надоумил дату [DataOriginal] хранить в строке?
[Tema] INT - оригинально!
А [AutorID] [varchar](3) - во как!
23 дек 11, 13:50    [11814910]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
danatriel,

вот лучше в таком "стиле" мне кажется
https://www.sql.ru/faq/faq_topic.aspx?fid=114
23 дек 11, 13:54    [11814947]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
danatriel
Member

Откуда: Ростов-на-Дону
Сообщений: 176
buriu,

ну да, лучше. но я думал, тебя такой вариант не устроил, т.к. его тебе давненько привели :)
23 дек 11, 13:56    [11814961]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
Большое спасибо. По правде это не я составлял но приходится плясать из этого.
23 дек 11, 13:57    [11814976]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
danatriel,

спаисбо большое , я разобрался.
23 дек 11, 13:58    [11814988]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
iap,

Скажите вы можете порекомендовать хорошую книгу по хранимым процедурам?
23 дек 11, 14:12    [11815125]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
buriu
iСкажите вы можете порекомендовать хорошую книгу по хранимым процедурам?
Профессиональное руководство по SQL Server: хранимые процедуры, XML, HTML. Для профессионалов (+ CD-ROM)
23 дек 11, 14:55    [11815591]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
invm
buriu
iСкажите вы можете порекомендовать хорошую книгу по хранимым процедурам?
Профессиональное руководство по SQL Server: хранимые процедуры, XML, HTML. Для профессионалов (+ CD-ROM)
Хорошая книжка...
Жаль автор рано ушел
23 дек 11, 14:58    [11815612]     Ответить | Цитировать Сообщить модератору
 Re: помогите пожалуйста с хранимой процедурой  [new]
buriu
Member

Откуда:
Сообщений: 60
invm,
спасибо.
23 дек 11, 15:07    [11815713]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить