Sql server 无法将输入参数传递给存储过程
我有这样的存储过程,根据搜索条件从数据库中获取值,我将这些值作为输入参数传递给该过程,但在Sql server 无法将输入参数传递给存储过程,sql-server,sql-server-2008,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2012,我有这样的存储过程,根据搜索条件从数据库中获取值,我将这些值作为输入参数传递给该过程,但在@StatusSelection CREATE PROCEDURE [dbo].[tp_SelectTransactionHistorySearch] ( @OffSetRowNo INT, @FetchRowNo INT, @StatusSelection NVARCHAR(MAX), @isReviewed Bit, @ProjectCaseNumber VARC
@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
我使用的是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
DECLARE @temp TABLE
(
string VARCHAR(10)
)
SET DATEFORMAT dmy
INSERT INTO @temp (string)
VALUES
('10-03-2013'),
('20-03-2013'),
('20-05-2013'),
('04-06-2013')
SELECT CAST(string AS DATE)
FROM @temp
获取如下错误Msg 8114,级别16,状态5,过程tp\u SelectTransactionHistorySearch,第0行
将数据类型varchar转换为datetime时出错
是否在代码隐藏端传递了值
SqlCommand com = new SqlCommand("SpName",conectionStringObj);
com.CommandType = CommandType.StoredProcedure;
**com.Parameters.AddWithValue("@StatusSelection", "Any Value");**
.
.
.
.
请检查这个。试试这个-
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 DATE,
@TransactionCreatedOnEndDate DATE,
@TransactionUpdatedOnBeginDate DATE,
@TransactionUpdateOnEndDate DATE,
@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
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 BETWEEN @TrasactionCreateOnBeginDate AND @TransactionCreatedOnEndDate
AND TH.UpdatedDateTime BETWEEN @TransactionUpdatedOnBeginDate AND @TransactionUpdateOnEndDate
AND 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
更新#1:
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
DECLARE @temp TABLE
(
string VARCHAR(10)
)
SET DATEFORMAT dmy
INSERT INTO @temp (string)
VALUES
('10-03-2013'),
('20-03-2013'),
('20-05-2013'),
('04-06-2013')
SELECT CAST(string AS DATE)
FROM @temp
在执行查询之前设置此选项-
SET DATEFORMAT dmy
或者,更可取的是,使用ISO
格式yyyymmdd
-
EXEC @return_value = [dbo].[tp_SelectTransactionHistorySearch]
...
@TrasactionCreateOnBeginDate = '20130310',
@TransactionCreatedOnEndDate = '20132003',
@TransactionUpdatedOnBeginDate = '20130520',
@TransactionUpdateOnEndDate = '20130604',
@ItemID = NULL
更新#2:
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
DECLARE @temp TABLE
(
string VARCHAR(10)
)
SET DATEFORMAT dmy
INSERT INTO @temp (string)
VALUES
('10-03-2013'),
('20-03-2013'),
('20-05-2013'),
('04-06-2013')
SELECT CAST(string AS DATE)
FROM @temp
线路
@TH.StatusID= 1
表示创建失败
所以你不能得到你给我们的代码显示的错误
有了这个,就可以创作作品了
AND TH.StatusID= 1
请尝试@StatusSelection NVARCHAR(MAX)=nullTStatType.Name=@StatusSelection…在这一行中,您可以将其更改为TStatType.Name=isnull(@StatusSelection',),或者可以是TStatType.Name=isnull(@StatusSelection,null)??@pratapk:-一定要让我知道您在这次更改后得到了什么???@Rahultripati我已经更改了那个我在日期转换方面遇到了问题…我得到了像09-09-2013、08-07-2013这样的数据库值。。。我得到的输入值与更新中提到的类似,但我得到的转换错误…我真的很抱歉,但我无法非常清楚地理解您的观点…但我得到的是,您无法将varchar值强制转换为DATETIME字段。为此,我已经在以下问题中回答了您:-如果您误解了我在sql server it内部执行此存储过程,请原谅。我认为您需要提及您是如何使此过程正常工作的。具体来说,这是如何删除关于
@StatusSelection
的错误消息的。该错误消息不会修复OP的错误。诚然,发布的代码并不是导致错误的原因,但如果您提到Q中发布的错误与代码无关,您不认为这会有所帮助吗?。您不需要在count(*)over()中输入order by()
,这样就可以了。@Mikael Eriksson谢谢您的评论。我在()上回滚COUNT(*)中的更改。我认为@TH.StatusID=1
中的主要语法错误。只需将其更改为和TH.StatusID=1
对不起,我从@TH.StatusID=1
中删除了@
符号,现在我收到另一个错误消息8114,级别16,状态5,程序tp\u SelectionTransactionHistorySearch,第0行错误将数据类型nvarchar转换为日期时间
。我如何解决这个问题…请帮忙,谢谢solution@pratapk:显示如何使用代码调用此过程。您的错误是由于缺少参数造成的。那么您是否正确使用了SQLParameter?还是使用字符串连接?