显示'将数据类型nvarchar转换为bigint时出错'。在sql server'

时间:2016-09-28 06:21:09

标签: sql-server sql-server-2008 sql-server-2012

在此过程中使用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子句中的日期

1 个答案:

答案 0 :(得分:0)

@ProductID@BranchID@Date的类型是什么?在创建条件时,我会尝试将这些值显式转换为varchar。