1
我目前正在開發一個SP,它爲系統帶回客戶列表。 SP根據尋呼帶回一定數量的數據。但是,我注意到由於我刪除了重複的記錄,所以要返回的總數據量是正確的。我需要能夠重新包含這些數據的臨時表。我嘗試了以下方法,但沒有奏效。重置臨時表的標識
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
Nevermind my previous comment。這個問題在我的Delete語句中。 – IyaTaisho