Я попытаюсь объяснить проблему в деталях. Я написал SP и успешно выполнил его. Вот оно:Ошибка выполнения хранимой процедуры SQL Server 2008
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InvoiceReference]
@StartDate DateTime = NULL,
@EndDate DateTime = NULL,
@DocumentType nvarchar(50) = NULL,
@Partners nvarchar(MAX) = NULL,
@PriceFrom numeric(19,6) = NULL,
@PriceTo numeric(19,6) = NULL,
@VATFrom numeric(19,6) = NULL,
@VATTo numeric(19,6) = NULL,
@PageNumber INT,
@PageSize INT
AS
BEGIN SET NOCOUNT ON;
DECLARE @StartPage as int
DECLARE @EndPage as int
SET @StartPage = ((@PageNumber-1) * @PageSize) + 1;
SET @EndPage = @StartPage + (@PageSize) - 1;
WITH ResultSet As (select
ROW_NUMBER() OVER (order by d.DocumentID) AS 'RowNumber',
d.DocNumber, dt.Name as DocumentTypesName, d.Date, p.Name as PartnersName, dd.SalePrice, dd.VAT, (dd.SalePrice + dd.VAT) as TotalSum
from [dbo].[Documents] d join [dbo].[DocumentTypes] dt on d.TypeID = dt.TypeID
join [dbo].[Partners] p on d.PartnerID = p.PartnerID
join [dbo].[DocumentDetails] dd on d.DocumentID = dd.DocumentID
where ((@StartDate is null) or (d.Date >= @StartDate))
and ((@EndDate is null) or (d.Date <= @EndDate))
and ((@DocumentType is null) or (dt.Name = @DocumentType))
--and ((@Partners is null) or (p.Name = @Partners))
and ((@Partners is null) or (p.Name in (select * from dbo.fnSplitString(@Partners, ','))))
and ((@PriceFrom is null) or (dd.SalePrice >= @PriceFrom))
and ((@PriceTo is null) or (dd.SalePrice <= @PriceTo))
and ((@VATFrom is null) or (dd.VAT >= @VATFrom))
and ((@VATTo is null) or (dd.VAT <= @VATTo))
)
Select * from ResultSet rs WHERE RowNumber between @StartPage and @EndPage
ORDER BY rs.Date ASC
END
Но тогда я обнаружил, что я должен был сделать фильтр более чем один «Партнер» (например: Partner1, партнер 2, ...). Затем я написал функцию, которая разделила параметр SP @Partners в отдельных строках. Но когда я прокомментировал старую часть в предложении «где» и поместил новую (вызвав функцию, которую я написал), он дал мне это сообщение об ошибке: «Не удается разрешить конфликт сортировки между« Cyrillic_General_CI_AS »и« Cyrillic_General_CS_AS »в равном операция «. когда я пытался выполнить SP. И ошибка находится в строке 26, которая равна: SET @StartPage = ((@ PageNumber-1) * @PageSize) + 1; и я ничего там не изменил. Я прочитал некоторые matirials, которые я нашел здесь о сортировке, но я все еще не могу понять проблему самостоятельно. Функция, которую я написал:
ALTER FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(200)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
Любая помощь будет оценена по достоинству.
Вы можете разместить свой последний попытался SP –
я отправил это, единственная разница с первоначальной SP является комментировал часть в предложении WHERE. – ppetyr