Имам това, което според мен е описано като динамична съхранена процедура, съкратена версия е по-долу
[dbo].[spImageCard_GetStatusByCountryAlphabetically]
@WhereClause nvarchar(2000)
AS
BEGIN
SET NOCOUNT ON
Declare @SelectStatement nvarchar(1800)
Declare @OrderClause nvarchar(200)
Declare @FullStatement nvarchar(4000)
Set @SelectStatement = 'Select Distinct [StampTable].StampId,[SeriesTable].Series, [StampTable].CatalogueNo, [CountryTable].Country, [ImageTable].Image From StampTable
left Join SeriesTable on StampTable.Series = SeriesTable.SeriesId
left Join ImageTable on StampTable.Image = ImageTable.ImageId
left Join CountryTable on StampTable.Country = CountryTable.CountryId
left Join StampQuantatiesTable on StampTable.StampId = StampQuantatiesTable.StampId
Left Join QuantatiesTable on StampQuantatiesTable.QuantatiesId = QuantatiesTable.QuantatiesId
Left Join [StatusTable] on QuantatiesTable.StatusId = StatusTable.StatusId '
Set @OrderClause = 'ORDER BY [CountryTable].Country, [StampTable].CatalogueNo'
Set @FullStatement = @SelectStatement + @WhereClause + @OrderClause
Execute (@FullStatement)
Това работи както се очаква, когато се извиква от следното
Declare @WhereClause Nvarchar(2000)
Set @WhereClause= 'WHERE StatusTable.Status IN (''Have'',''Want'')
AND [CountryTable].Country IN (''Aden'')'
Execute spImageCard_GetStatusByCountryAlphabetically @WhereClause = @WhereClause
Сега се опитвам да представя това, което смятам, че се отнася до пагинация, моят опростен самостоятелен работен пример за това е
[dbo].[spPageReturnTest]
@PageNumber As INT,@RowsInPage As INT
AS
BEGIN
SET NOCOUNT ON
Select stampid, CatalogueNo From StampTable
Order by Stampid
Offset (@PageNumber-1)*@RowsInPage ROWS
Fetch Next @RowsInPage Rows Only
За съжаление, когато се опитвам да въведа съответните части (@Parameters и линиите Offset и Fetch), получавам множество грешки. Всяка помощ ще бъде много оценена
Последната ми версия, която взема предвид вашите коментари относно sqlString и cast, е както следва:
[dbo].[spImageCard_GetStatusByCountryAlphabetically]
@WhereClause nvarchar(2000), @PageNumber INT,@RowsInPage INT
AS
BEGIN
SET NOCOUNT ON
Declare @SelectStatement nvarchar(1650)
Declare @OrderClause nvarchar(200)
Declare @FullStatement nvarchar(4000)
Declare @Pagination nvarchar(150)
Declare @PageNumberString nvarchar(4)
Declare @RowsInPageString nvarchar(4)
Set @PageNumberString = Cast(@PageNumber As nvarchar(4))
Set @RowsInPageString = cast(@RowsInPage As nvarchar(4))
Set @SelectStatement = 'Select Distinct [StampTable].StampId,[SeriesTable].Series, [StampTable].CatalogueNo, [CountryTable].Country, [ImageTable].Image From StampTable
left Join SeriesTable on StampTable.Series = SeriesTable.SeriesId
left Join ImageTable on StampTable.Image = ImageTable.ImageId
left Join CountryTable on StampTable.Country = CountryTable.CountryId
left Join StampQuantatiesTable on StampTable.StampId = StampQuantatiesTable.StampId
Left Join QuantatiesTable on StampQuantatiesTable.QuantatiesId = QuantatiesTable.QuantatiesId
Left Join [StatusTable] on QuantatiesTable.StatusId = StatusTable.StatusId '
Set @OrderClause = 'ORDER BY [CountryTable].Country, [StampTable].CatalogueNo'
Set @Pagination = 'Offset (('+@PageNumberString+'-1)*'+@RowsInPageString+') ROWS Fetch Next '+@RowsInPageString+' Rows Only'
Set @FullStatement = @SelectStatement + @WhereClause + @OrderClause + @Pagination
Execute sp_executesql @FullStatement
И моята процедура за обаждане е
Declare @WhereClause Nvarchar(2000)
Declare @PageNumber INT
Declare @RowsInPage INT
Set @WhereClause= 'WHERE StatusTable.Status IN (''Have'',''Want'')
AND [CountryTable].Country IN (''Aden'')'
Execute spImageCard_GetStatusByCountryAlphabetically @WhereClause = @WhereClause,@PageNumber=1,@RowsInPage=3
Грешката, която получавам, е следната
Msg 102, ниво 15, състояние 1, ред 8 Неправилен синтаксис близо до „РЕДОВЕ“. Съобщение 153, ниво 15, състояние 2, ред 8 Невалидно използване на опцията Next в оператора FETCH.
Моля, имайте предвид, че също опитах N'в началото на всеки низ и грешката е същата