【发布时间】:2013-08-20 06:24:54
【问题描述】:
我有这样的存储过程,根据我传递的搜索条件从数据库中获取值,这些值作为该过程的输入参数,但在@StatusSelection 处出现错误
CREATE PROCEDURE [dbo].[tp_SelectTransactionHistorySearch]
(
@OffSetRowNo INT,
@FetchRowNo INT,
@StatusSelection NVARCHAR(MAX),
@isReviewed Bit,
@ProjectCaseNumber VARCHAR(MAX),
@CostPageNumber VARCHAR(MAX),
@TransactionTypeChange VARCHAR(MAX),
@DescriptionChange VARCHAR(MAX),
@TrasactionCreateOnBeginDate DATETIME,
@TransactionCreatedOnEndDate DATETIME,
@TransactionUpdatedOnBeginDate DATETIME,
@TransactionUpdateOnEndDate DATETIME,
@ItemID VARCHAR(MAX)
)
AS
Select
TH.TransactionID,
TH.IsReviewed,
TH.ItemID,
TH.CostPageNumber,
TH.Comments,
TH.CreatedBy,
TH.CreatedDateTime,
TH.UpdatedBy,
TH.UpdatedDateTime,
TH.TransactionDescription,
TH.TransactionTypeID,
IAccrualByItem.PROJCASE,
IAccrualByItem.USTSTAT as TransactionStatusID,
TStatType.Name AS TransactionStatusTypeName,
TStatType.Description AS TransactionStatusTypeDescription,
TType.Name AS TransactionTypeName,
TType.Description AS TransactionTypeDescription,
COUNT(*) OVER () as TotalCount
FROM TransactionHistory AS TH
INNER JOIN TRVMVSDDVW001.INTERFACE_Files.dbo.DBATUSTA AS IAccrualByItem
ON TH.TransactionID = CAST(IAccrualByItem.USTTRNNBR AS int)
LEFT JOIN dbo.TransctionStatusType AS TStatType
ON TStatType.TransactionStatusTypeID = IAccrualByItem.USTSTAT
LEFT JOIN dbo.TransactionType AS TType
ON TType.TransactionTypeID = CAST(TH.TransactionTypeID AS int)
WHERE TStatType.Name = @StatusSelection AND TH.IsReviewed= @isReviewed
AND IAccrualByItem.PROJCASE=@ProjectCaseNumber AND TH.CostPageNumber=@CostPageNumber
AND TH.TransactionDescription=@TransactionTypeChange AND TType.Description=@DescriptionChange
AND (TH.CreatedDateTime >= CAST(@TrasactionCreateOnBeginDate AS DATE)) AND (TH.CreatedDateTime < CAST(@TransactionCreatedOnEndDate AS DATE))
AND (TH.UpdatedDateTime >= CAST( @TransactionUpdatedOnBeginDate AS DATE)) AND (TH.UpdatedDateTime < CAST(@TransactionUpdateOnEndDate AS DATE))
@TH.StatusID= 1
GROUP BY TH.TransactionID,TH.IsReviewed,TH.ItemID,TH.CostPageNumber,TH.Comments,TH.CreatedBy,TH.CreatedDateTime,
TH.UpdatedBy,TH.UpdatedDateTime, TH.TransactionDescription, TH.TransactionTypeID,IAccrualByItem.PROJCASE,TransactionStatusID,
TStatType.Name,TStatType.Description,TType.Name,TType.Description
ORDER BY TH.TransactionID,TH.ItemID,TH.CostPageNumber
OFFSET ( @OffSetRowNo-1 ) * @FetchRowNo ROWS
FETCH NEXT @FetchRowNo ROWS ONLY
但是我遇到了这样的错误
`Msg 137, Level 15, State 2, Line 27
Must declare the scalar variable "@StatusSelection"`.
我使用的是sql server 2012版本
请任何人帮助解决此解决方案以及对此的任何想法.. 非常感谢.....
更新:
DECLARE @return_value int
EXEC @return_value = [dbo].[tp_SelectTransactionHistorySearch]
@OffSetRowNo = 1,
@FetchRowNo = 1,
@StatusSelection = N's',
@isReviewed = NULL,
@ProjectCaseNumber = NULL,
@CostPageNumber = NULL,
@TransactionTypeChange = NULL,
@DescriptionChange = NULL,
@TrasactionCreateOnBeginDate = '10-03-2013',
@TransactionCreatedOnEndDate = '20-03-2013',
@TransactionUpdatedOnBeginDate = '20-05-2013',
@TransactionUpdateOnEndDate = '04-06-2013',
@ItemID = NULL
SELECT 'Return Value' = @return_value
GO
出现这样的错误Msg 8114, Level 16, State 5, Procedure tp_SelectTransactionHistorySearch, Line 0
Error converting data type varchar to datetime。
【问题讨论】:
-
试试@StatusSelection NVARCHAR(MAX)=null
-
TStatType.Name = @StatusSelection...在这一行中,您可以将其更改为 TStatType.Name = isnull(@StatusSelection,'') 还是 TStatType.Name =isnull(@StatusSelection, null )??
-
@pratapk:- 让我知道您在此更改后得到了什么??
-
@RahulTripathi 我已经更改了一个我在日期转换方面遇到问题的问题...我有数据库值,例如 09-09-2013 、 08-07-2013 ...我有传入的值就像上面在更新中提到的,但我收到转换错误....
-
我真的很抱歉,但我无法非常清楚地理解您的观点......但我得到的是您无法将 varchar 值转换为 DATETIME 字段。为此,我已经在问题中回答了您:- stackoverflow.com/questions/18327812/…
标签: sql-server sql-server-2008 sql-server-2012