在此过程中使用nvarchar(Max)
并加入查询并由EXEC sp_executesql
执行,它显示上述错误错误,将数据类型nvarchar转换为bigint。在sql server中,没有使用加入和sp_executesql
它将完美地工作。我怎样才能在sql中解决这个错误。
DECLARE
@mainSqlQuery nvarchar(max),
@GroupBySection nvarchar(max)
-- Insert statements for procedure here
SELECT @mainSqlQuery = N'--
SELECT
BRCH.BranchName [BranchName],
ASI.SubInventoryName [SubInventory],
APRO.ProductName [Product],
ASICT.TransactDateTime [DateTime],
ASICT.ProductStock [Stock],
ASICT.ProductStockInLocalCrrncy [Local Stock] INTO #MyTempTable
FROM ALX_SubInventoryCashTransfers ASICT
INNER JOIN
ALX_Branches BRCH ON BRCH.BranchID= ASICT.BranchID
INNER JOIN
ALX_SubInventories ASI ON ASI.SubInventoryID=ASICT.SubInventoryID
INNER JOIN
ALX_Products APRO ON APRO.ProductID= ASICT.ProductID
INNER JOIN
(SELECT
BranchID,
SubInventoryID,
ProductID,
MAX(TransactDateTime) AS MaxDate
FROM ALX_SubInventoryCashTransfers'
Select @GroupBySection = N'-- GROUP BY BranchID,
SubInventoryID,
ProductID) SubASICT
ON ASICT.BranchID = SubASICT.BranchID
AND ASICT.SubInventoryID = SubASICT.SubInventoryID
AND ASICT.ProductID = SubASICT.ProductID
AND ASICT.TransactDateTime = SubASICT.MaxDate'
Declare @Condition nvarchar(max)
if(@Date is null)
BEGIN
Select @Condition='WHERE
(( ISNULL(ProductID,0)=''' +@ProductID+') OR'+@ProductID+'''=0)AND
(( ISNULL(BranchID,0)=''' +@BranchID+') OR '+@BranchID+'''=0) '
Declare @Query nvarchar(max);Select @Query=@mainSqlQuery+@Condition+@GroupBySect
EXEC sp_executesql @Query;
END
IF(@Date is not null)
BEGIN
Select @Condition='WHERE
CONVERT(DATETIME,FCSB.FCBuySellDate,105)=''' +@Date+''' AND
(( ISNULL(ProductID,0)=''' +@ProductID+') OR'+@ProductID+'''=0)AND
(( ISNULL(BranchID,0)=''' +@BranchID+') OR '+@BranchID+'''=0) '
Declare @Query1 nvarchar(max);Select @Query=@mainSqlQuery+@Condition+@GroupBySection;
EXEC sp_executesql @Query1;
END
*注意: - 在这里我需要一个条件在where子句中工作,(如果date为null,则日期是主要问题我需要显示所有细节,但是当我在日期中放入null时,没有数据会出现,所以我更喜欢这种方法,但我知道这是一种最糟糕的方法,但是日期条件需要像这样显示任何其他意见来克服where子句中的日期
答案 0 :(得分:0)
@ProductID
,@BranchID
和@Date
的类型是什么?在创建条件时,我会尝试将这些值显式转换为varchar。