현재 시스템의 고객 목록을 반환하는 SP 작업 중입니다. SP는 페이징을 기반으로 많은 양의 데이터를 가져옵니다. 그러나 중복 된 레코드를 삭제하기 때문에 반환되는 총 데이터의 양이 올바르지 않은 것으로 나타났습니다. 이 데이터가 들어있는 임시 테이블을 다시 시드 할 수 있어야합니다. 나는 다음을 시도했지만 효과가 없었다.임시 테이블의 ID 재설정
DBCC CHECKIDENT (#ReturnData, RESEED, 0)
여기에 SP가 있습니다.
USE [SupplyCatalogDB]
GO
/****** Object: StoredProcedure [dbo].[CustomerLoadAllPaged] Script Date: 6/10/2014 8:33:16 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CustomerLoadAllPaged]
(
@CustomerRoles nvarchar(20) = NULL,
@IsActive bit = NULL,
@Username nvarchar(1000) = NULL,
@FirstName nvarchar(MAX) = NULL,
@LastName nvarchar(MAX) = NULL,
@UnitId int = NULL,
@SortBy int = 0, --0 = CreatedOnUtc Asc, 1 = CreatedOnUtc Desc, 2 = Username Asc, 3 = Username Desc,
--4 = CustomerName Asc, 5 = CustomerName Desc, 6 = Unit Asc, 7 = Unit Desc, 8 = CustomerRoles Asc,
--9 = CustomerRoles Desc, 10 = Active Asc, 11 = Active Desc, 12 = LastActivityOnUtc Asc,
--13 = LastActivityOnUtc Desc, 14 = Location Asc, 15 = Location Desc, 16 = TM Asc, 17 = TM Desc,
--18 = Phone Asc, 19 = Phone Desc
@PageIndex int = 0,
@PageSize int = 2147483644,
@TotalRecords int = null OUTPUT
)
AS
BEGIN
DECLARE @SQL nvarchar(MAX)
--paging
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @RowsToReturn int
SET @RowsToReturn = @PageSize * (@PageIndex + 1)
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
--Create table to store Customer Role Ids
CREATE TABLE #Roles
(
CustomerRoleId int
)
--Check to see if there is any Customer Roles to search on
IF @CustomerRoles IS NOT NULL
BEGIN
INSERT INTO #Roles
SELECT CAST(data as int) FROM [nop_splitstring_to_table](@CustomerRoles, ',')
END
CREATE TABLE #ReturnData
(
Id int IDENTITY (1, 1) NOT NULL,
CustomerId int,
FullName nvarchar(MAX),
Username nvarchar(1000),
UnitId int,
UnitName nvarchar(MAX),
CustomerRoles nvarchar(MAX),
AddressId int,
Location nvarchar(MAX),
TM nvarchar(MAX),
Phone nvarchar(MAX),
Active bit,
CreatedOnUtc datetime,
LastActivityDateUtc datetime,
CustomerGuid uniqueidentifier,
Email nvarchar(1000),
[Password] nvarchar(MAX),
PasswordFormatId int,
PasswordSalt nvarchar(MAX),
AdminComment nvarchar(MAX),
LanguageId int,
CurrencyId int,
TaxDisplayTypeId int,
IsTaxExempt bit,
VatNumber nvarchar(MAX),
VatNumberStatusId int,
SelectedPaymentMethodSystemName nvarchar(MAX),
CheckoutAttributes nvarchar(MAX),
DiscountCouponCode nvarchar(MAX),
GiftCardCouponCodes nvarchar(MAX),
UseRewardPointsDuringCheckout bit,
TimeZoneId nvarchar(MAX),
AffiliateId int,
Deleted bit,
IsSystemAccount bit,
SystemName nvarchar(MAX),
LastIpAddress nvarchar(MAX),
LastLoginDateUtc datetime,
OldEmployeeId int,
OldId int,
BillingAddress_Id int,
ShippingAddress_Id int,
CJISBillingAddress_Id int,
CJISShippingAddress_Id int
)
SET @SQL = 'INSERT INTO #ReturnData
SELECT Distinct C.Id AS CustomerId, IsNULL(dbo.GetFullName(C.Id), '''') AS FullName,
C.Username, C.UnitId, dbo.GetUnitText(C.UnitId) AS UnitName,
dbo.GetCustomerRoles(C.Id) AS CustomerRoles, CA.Id AS AddressId,
CA.Location, CA.TM, CA.Phone, C.Active, C.CreatedOnUtc, C.LastActivityDateUtc,
C.CustomerGuid, C.Email, C.[Password], C.PasswordFormatId,
C.PasswordSalt, C.AdminComment, C.LanguageId, C.CurrencyId,
C.TaxDisplayTypeId, C.IsTaxExempt, C.VatNumber, C.VatNumberStatusId,
C.SelectedPaymentMethodSystemName, C.CheckoutAttributes,
C.DiscountCouponCode, C.GiftCardCouponCodes, C.UseRewardPointsDuringCheckout,
C.TimeZoneId, C.AffiliateId, C.Deleted, C.IsSystemAccount, C.SystemName,
C.LastIpAddress, C.LastLoginDateUtc, C.OldEmployeeId, C.OldId,
C.BillingAddress_Id, C.ShippingAddress_Id, C.CJISBillingAddress_Id,
C.CJISShippingAddress_Id
FROM Customer C
LEFT JOIN Customer_CustomerRole_Mapping CCRM ON C.Id = CCRM.Customer_Id
LEFT JOIN CustomerCJISAddresses CCA ON C.Id = CCA.Customer_Id
LEFT JOIN CJISAddress CA ON CCA.CJISAddress_Id = CA.Id
AND CA.IsPrimary = 1
LEFT JOIN GenericAttribute GA ON GA.KeyGroup = ''Customer''
AND (GA.[Key] = ''FirstName'' OR GA.[Key] = ''LastName'')
AND C.Id = GA.EntityId '
IF @CustomerRoles IS NOT NULL
BEGIN
SET @SQL = @SQL + 'WHERE CCRM.CustomerRole_Id IN (SELECT CustomerRoleId FROM #Roles) '
END
IF @IsActive IS NOT NULL
BEGIN
--Do a check to see if the 'Where' clause already exists
IF dbo.GetWhereCheck(@SQL) = 1
BEGIN
SET @SQL = @SQL + 'AND C.Active = @IsActive '
END
--'Where' clause doesn't exist yet
ELSE
BEGIN
SET @SQL = @SQL + 'WHERE C.Active = @IsActive '
END
END
IF @Username IS NOT NULL
BEGIN
--Do a check to see if the 'Where' clause already exists
IF dbo.GetWhereCheck(@SQL) = 1
BEGIN
SET @SQL = @SQL + 'AND C.Username LIKE ''' + @Username + ''' '
END
--'Where' clause doesn't exist yet
ELSE
BEGIN
SET @SQL = @SQL + 'WHERE C.Username LIKE ''' + @Username + ''' '
END
END
IF @FirstName IS NOT NULL
BEGIN
--Do a check to see if the 'Where' clause already exists
IF dbo.GetWhereCheck(@SQL) = 1
BEGIN
SET @SQL = @SQL + 'AND (GA.[Key] = ''FirstName'' AND GA.[Value] LIKE ''' + @FirstName + ''') '
END
--'Where' clause doesn't exist yet
ELSE
BEGIN
SET @SQL = @SQL + 'WHERE (GA.[Key] = ''FirstName'' AND GA.[Value] LIKE ''' + @FirstName + ''') '
END
END
IF @LastName IS NOT NULL
BEGIN
--Do a check to see if the 'Where' clause already exists
IF dbo.GetWhereCheck(@SQL) = 1
BEGIN
SET @SQL = @SQL + 'AND (GA.[Key] = ''LastName'' AND GA.[Value] LIKE ''' + @LastName + ''') '
END
--'Where' clause doesn't exist yet
ELSE
BEGIN
SET @SQL = @SQL + 'WHERE (GA.[Key] = ''LastName'' AND GA.[Value] LIKE ''' + @LastName + ''') '
END
END
IF @UnitId IS NOT NULL
BEGIN
--Do a check to see if the 'Where' clause already exists
IF dbo.GetWhereCheck(@SQL) = 1
BEGIN
SET @SQL = @SQL + 'AND C.UnitId = @UnitId '
END
--'Where' clause doesn't exist yet
ELSE
BEGIN
SET @SQL = @SQL + 'WHERE C.UnitId = @UnitId '
END
END
--Do Order By
DECLARE @OrderByText nvarchar(50)
SET @OrderByText = 'Order By '
SET @OrderByText = @OrderByText +
CASE
WHEN @SortBy = 0 THEN 'C.CreatedOnUtc DESC'
WHEN @SortBy = 1 THEN 'C.CreatedOnUtc ASC'
WHEN @SortBy = 2 THEN 'C.Username ASC'
WHEN @SortBy = 3 THEN 'C.Username DESC'
WHEN @SortBy = 4 THEN 'FullName ASC'
WHEN @SortBy = 5 THEN 'FullName DESC'
WHEN @SortBy = 6 THEN 'UnitName ASC'
WHEN @SortBy = 7 THEN 'UnitName DESC'
WHEN @SortBy = 8 THEN 'CustomerRoles ASC'
WHEN @SortBy = 9 THEN 'CustomerRoles DESC'
WHEN @SortBy = 10 THEN 'C.Active ASC'
WHEN @SortBy = 11 THEN 'C.Active DESC'
WHEN @SortBy = 12 THEN 'C.LastActivityDateUtc ASC'
WHEN @SortBy = 13 THEN 'C.LastActivityDateUtc DESC'
WHEN @SortBy = 14 THEN 'CA.Location ASC'
WHEN @SortBy = 15 THEN 'CA.Location DESC'
WHEN @SortBy = 16 THEN 'CA.TM ASC'
WHEN @SortBy = 17 THEN 'CA.TM DESC'
WHEN @SortBy = 18 THEN 'CA.Phone ASC'
WHEN @SortBy = 19 THEN 'CA.Phone DESC'
END;
SET @SQL = @SQL + @OrderByText
EXEC sp_executesql @SQL,
N'@IsActive bit, @UnitId int',
@IsActive, @UnitId
DECLARE @DuplicateFields int
SET @TotalRecords = @@ROWCOUNT
DELETE FROM dupes
FROM #ReturnData dupes,
#ReturnData fullTable
WHERE dupes.CustomerId = fullTable.CustomerId
AND dupes.AddressId IS NULL
AND dupes.Id < fullTable.Id
SET @DuplicateFields = @@ROWCOUNT
SET @TotalRecords = @TotalRecords - @DuplicateFields
DBCC CHECKIDENT (#ReturnData, RESEED, 0)
SELECT TOP (@RowsToReturn) CustomerId AS Id,
Username, UnitId, Active, CreatedOnUtc,
LastActivityDateUtc, CustomerGuid,
Email, [Password], PasswordFormatId, PasswordSalt,
AdminComment, LanguageId, CurrencyId, TaxDisplayTypeId,
IsTaxExempt, VatNumber, VatNumberStatusId,
SelectedPaymentMethodSystemName, CheckoutAttributes,
DiscountCouponCode, GiftCardCouponCodes,
UseRewardPointsDuringCheckout, TimeZoneId, AffiliateId,
Deleted, IsSystemAccount, SystemName, LastIpAddress,
LastLoginDateUtc, OldEmployeeId, OldId, BillingAddress_Id,
ShippingAddress_Id, CJISBillingAddress_Id,
CJISShippingAddress_Id
FROM #ReturnData
WHERE Id > @PageLowerBound
AND Id < @PageUpperBound
DROP TABLE #Roles
DROP TABLE #ReturnData
END
내 이전 메모를 잊어 버리십시오. 문제는 내 Delete 문 내에있었습니다. – IyaTaisho