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

Откуда:
Сообщений: 1
Нужно что-то в этом духе:
(Параметром @sort передается название столбца)

CREATE PROCEDURE [dbo].[GetAgreementsForPeriod] @ForPeriod datetime, @sort varchar AS

SELECT A.Id, A.Number, A.AgreementDate, A.AgreementSum, A.Appendix, A.CustomerId, A.ExecutorId, A.ObjectId,
dbo.Objects.Title AS ObjectTitle,
dbo.Objects.Address AS ObjectAddress,
dbo.Objects.Code AS ObjectCode,
CC.Title AS Customer,
CE.Title AS Executor,
D.Title AS Department
FROM dbo.Agreements A
INNER JOIN dbo.Companies CC ON A.CustomerId = CC.Id
INNER JOIN dbo.Objects ON A.ObjectId = dbo.Objects.Id
INNER JOIN dbo.Companies CE ON A.ExecutorId = CE.Id
INNER JOIN dbo.Departments D ON A.DepartmentId = D.Id
WHERE (DATEDIFF(dd, A.AgreementDate, @ForPeriod) >= 0)
ORDER BY @sort, A.AgreementDate
GO
23 янв 04, 16:17    [505027]     Ответить | Цитировать Сообщить модератору
 Re: Как в хранимой процедуре сделать ORDER BY в зависимости от параметра процедуры (переменной) ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
ASC or DESC
23 янв 04, 16:25    [505043]     Ответить | Цитировать Сообщить модератору
 Re: Как в хранимой процедуре сделать ORDER BY в зависимости от параметра процедуры (переменной) ?  [new]
lionking
Guest
попробуй так

CREATE PROCEDURE [dbo].[GetAgreementsForPeriod] @ForPeriod datetime, @sort varchar AS
exec('SELECT A.Id, A.Number, A.AgreementDate, A.AgreementSum, A.Appendix, A.CustomerId, A.ExecutorId, A.ObjectId,
dbo.Objects.Title AS ObjectTitle,
dbo.Objects.Address AS ObjectAddress,
dbo.Objects.Code AS ObjectCode,
CC.Title AS Customer,
CE.Title AS Executor,
D.Title AS Department
FROM dbo.Agreements A
INNER JOIN dbo.Companies CC ON A.CustomerId = CC.Id
INNER JOIN dbo.Objects ON A.ObjectId = dbo.Objects.Id
INNER JOIN dbo.Companies CE ON A.ExecutorId = CE.Id
INNER JOIN dbo.Departments D ON A.DepartmentId = D.Id
WHERE (DATEDIFF(dd, A.AgreementDate, @ForPeriod) >= 0)
ORDER BY '+@sort+', A.AgreementDate')
GO
24 янв 04, 18:45    [505811]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить