2016-09-28 3 views
0

Используя nvarchar(Max) и присоединитесь к запросу и выполните EXEC sp_executesql во время этого процесса, он показывает приведенную выше ошибку ошибки, преобразуя тип данных nvarchar в bigint. в sql-сервере, без использования соединения и sp_executesql он будет работать идеально. как я могу решить эту ошибку в sql.Показаны «ошибка преобразования типа данных nvarchar в bigint. в 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)=''' [email protected]+') OR'[email protected]+'''=0)AND 
           ((ISNULL(BranchID,0)=''' [email protected]+') OR '[email protected]+'''=0) ' 
           Declare @Query nvarchar(max);Select @[email protected][email protected][email protected] 
        EXEC sp_executesql @Query; 
     END 
    IF(@Date is not null) 
     BEGIN 
       Select @Condition='WHERE 
           CONVERT(DATETIME,FCSB.FCBuySellDate,105)=''' [email protected]+''' AND 
           ((ISNULL(ProductID,0)=''' [email protected]+') OR'[email protected]+'''=0)AND 
           ((ISNULL(BranchID,0)=''' [email protected]+') OR '[email protected]+'''=0) ' 
        Declare @Query1 nvarchar(max);Select @[email protected][email protected][email protected]; 
        EXEC sp_executesql @Query1; 
     END 

* Примечание: -в этом мне нужно условие для работы в ИНЕКЕ, (дата является основной проблемой, если дата является пустой я не нужна, чтобы отобразить все детали, но в этом, когда я поставил нуль в дате нет данные будут поступать, поэтому я предпочитаю этот метод, но я знаю, что это худший метод, но условие необходимость даты, чтобы отобразить, как это любое другое мнение, чтобы преодолеть дату в где положении

+0

@owcZark это @product ID (bigint) @ProductID (bigint), @BranchID (bigint) и @Date (DateTime), –

ответ

0

Какого типа являются @ProductID, @BranchID и @Date? Я попытался бы преобразовать эти значения в varchar явно при создании условия.

+0

@owcZark - это @productID (bigint) @ProductID (bigint), @BranchID (bigint) и @Date (DateTime), –

+0

Итак, вместо того, чтобы использовать их напрямую, конвертируйте их в varchar, например: '((ISNULL (ProductID, 0) = '' '+ convert (varchar (255), @ProductID) +') OR '+ convert (varchar (255), @ProductID) + '' '= 0) И 'Кроме того, я не уверен, почему вы используете' '' - должно ли значение быть отправлено в varchar во время выполнения запроса? Я верю, поскольку сравнение делает 0 в случае нулевого значения, нет необходимости бросать. Не используйте '' '' '. – owczarek

+0

нет, потому что .. мне это нужно для работы в предложении where (Date является основной проблемой, если date null, мне нужно отобразить все данные, но в этом случае, когда я помещаю null в дату, никакие данные не появятся, поэтому Я предпочитаю этот метод, но я знаю, что это худший метод, но условие даты ineed для такого типа, как это, любое другое открытие для преодоления даты в предложении where –

Смежные вопросы