Sql /李> [产品].[dbo].[CurrentOnHand] 存储VARCHAR(4) 我不相信NCHAR是解决方案,而不是与其他一些变化巧合。我会通过使用探查器查看在每种情况下传递的不同查询来进行测试,然后查看每个查询的查询计划。我也不相信NCHAR

Sql /李> [产品].[dbo].[CurrentOnHand] 存储VARCHAR(4) 我不相信NCHAR是解决方案,而不是与其他一些变化巧合。我会通过使用探查器查看在每种情况下传递的不同查询来进行测试,然后查看每个查询的查询计划。我也不相信NCHAR,sql,tsql,variables,char,varchar,Sql,Tsql,Variables,Char,Varchar,/李> [产品].[dbo].[CurrentOnHand] 存储VARCHAR(4) 我不相信NCHAR是解决方案,而不是与其他一些变化巧合。我会通过使用探查器查看在每种情况下传递的不同查询来进行测试,然后查看每个查询的查询计划。我也不相信NCHAR是真正的解决方案,但实际上除了变量的数据类型之外,我没有做任何其他更改。我将研究如何使用探查器,看看这是否对某些内容有帮助。表[LP].[dbo].[scan\u file]aa中的scan\u store字段的类型是什么。这是所有其他类型都应

/李>
  • [产品].[dbo].[CurrentOnHand]
    • 存储VARCHAR(4)

  • 我不相信NCHAR是解决方案,而不是与其他一些变化巧合。我会通过使用探查器查看在每种情况下传递的不同查询来进行测试,然后查看每个查询的查询计划。我也不相信NCHAR是真正的解决方案,但实际上除了变量的数据类型之外,我没有做任何其他更改。我将研究如何使用探查器,看看这是否对某些内容有帮助。表[LP].[dbo].[scan\u file]aa中的scan\u store字段的类型是什么。这是所有其他类型都应该是的。此外,对于测试,请使用3个字符的字符变量,如“333”而不是“1”或“12”。如果行为发生变化,则需要将每个比较转换为正确的字符串填充类型。换句话说,“12”和“1”不是“1”。这就是为什么我很少使用char和nchar。它经常让你感到沮丧。另外,NChar实际上是2个字节,在进行比较时会导致其他数学问题。SSRS中的类型定义在rs中的定义方式可能会影响问题的行为。我强烈建议您将参数设置为存储的proc字符串,然后强制sql代码强制转换为NChar或Char,以便外部用户始终传递字符串类型。字符串类型定义得很好。LP.dbo.scan_文件中的scan_存储的类型是CHAR(3)。所有的商店号码都是3位数,所以我一直使用333、123等等。
    ALTER PROC [dbo].[Inventory_pr_rpt_Scanfile_InvalidColorSize]
    
    (
        @STORE CHAR(3)
    )
    AS
    
    
    --set statistics io on 
    
    
    /** TEST **/
    
        --DECLARE   @STORE CHAR(3)
        --SET       @STORE = '180'
    
    
    /** Drop existing temp table **/ 
    
        IF OBJECT_ID('tempdb..#TEMP_ScanBadData') IS NOT NULL
        DROP TABLE #TEMP_ScanBadData
    
        IF OBJECT_ID('tempdb..#TEMP_ScanDiscrepancy') IS NOT NULL
        DROP TABLE #TEMP_ScanDiscrepancy
    
        IF OBJECT_ID('tempdb..#TEMP_ScanFinalReport') IS NOT NULL
        DROP TABLE #TEMP_ScanFinalReport    
    
    
        CREATE TABLE #TEMP_ScanBadData (scan_store char(3)
                                          ,scan_sku char(45)
                                          ,scan_qty int
                                          ,errormessage varchar(255))
    
        CREATE TABLE #TEMP_ScanFinalReport(scan_store char(3)
                                          ,scan_sku char(45)
                                          ,scan_qty int
                                          ,storeOH_qty int
                                          ,errormessage varchar(255))   
    
        CREATE TABLE #TEMP_ScanDiscrepancy(scan_store char(3)
                                          ,scan_sku char(45)
                                          ,scan_qty int
                                          ,storeOH_qty int
                                          ,errormessage varchar(255))                             
    
    /** Does SKU exist in our system? (Valid color/size/style check) **/
    INSERT INTO #TEMP_ScanBadData (scan_store
                                          ,scan_sku
                                          ,scan_qty
                                          ,errormessage)
        SELECT scan_store
            ,scan_sku
            ,scan_qty
            ,'SKU does not exist.' as errormessage           
        FROM [LP].[dbo].[scan_file]
        WHERE scan_sku NOT IN (SELECT ItemID
                               FROM [Product].[dbo].[MasterSKU])
        AND scan_store = @STORE
    
    
    
    /** Does scanned SKU exist in store on hand? **/
        INSERT INTO #TEMP_ScanDiscrepancy (scan_store
                                          ,scan_sku
                                          ,scan_qty
                                          ,storeOH_qty
                                          ,errormessage)    
        SELECT aa.scan_store 
              ,aa.scan_sku
              ,aa.scan_qty
              ,'' as storeOH_qty
              ,'Scanned SKU missing in store OH.' as errormessage
        FROM [LP].[dbo].[scan_file] aa
        FULL OUTER JOIN [Product].[dbo].[CurrentOnHand] bb
                ON aa.scan_sku = bb.ItemID
                and aa.scan_store = bb.Store 
        WHERE bb.ItemID IS NULL
        AND aa.scan_store = @STORE
        and bb.Store = @STORE
    
    
    /** Were any store OH SKU's missed in scan? **/
        INSERT INTO #TEMP_ScanDiscrepancy (scan_store
                                          ,scan_sku
                                          ,scan_qty
                                          ,storeOH_qty
                                          ,errormessage)    
        SELECT aa.Store   as 'scan_store'
              ,aa.ItemId  as 'scan_sku'
              ,aa.OnHandU as 'scan_qty'
              ,'' as storeOH_qty
              ,'SKU was not scanned.' as errormessage
        FROM [Product].[dbo].[CurrentOnHand] aa
        LEFT JOIN [LP].[dbo].[scan_file] bb
                ON aa.ItemID = bb.scan_sku
                and aa.Store = bb.scan_store 
        WHERE bb.scan_sku IS NULL
        AND aa.Store = @STORE
        and bb.scan_store = @STORE
    
    /** What are the qty differences between scanned and OH? **/
        INSERT INTO #TEMP_ScanDiscrepancy (scan_store
                                          ,scan_sku
                                          ,scan_qty
                                          ,storeOH_qty
                                          ,errormessage)    
        SELECT aa.scan_store
            ,aa.scan_sku
            ,aa.scan_qty
            ,bb.OnHandU as 'storeOH_qty'
            ,'QTY does not match between scan and store OH.' as errormessage
        FROM [LP].[dbo].[scan_file] aa
        JOIN [Product].[dbo].[CurrentOnHand] bb
            ON bb.ItemId = aa.scan_sku
            AND aa.scan_store = bb.Store        
        WHERE bb.Store = @STORE
        AND bb.OnHandU <> aa.scan_qty   
        AND aa.scan_store = @STORE
    
    
          INSERT INTO #TEMP_ScanFinalReport (scan_store
          ,scan_sku
          ,scan_qty
          ,storeOH_qty
          ,errormessage)    
          SELECT scan_store 
              ,scan_sku 
              ,scan_qty 
              ,storeOH_qty 
              ,errormessage 
          FROM #TEMP_ScanDiscrepancy    
    
        INSERT INTO #TEMP_ScanFinalReport (scan_store
          ,scan_sku
          ,scan_qty
          ,storeOH_qty
          ,errormessage)    
          SELECT scan_store 
              ,scan_sku 
              ,scan_qty 
              ,'' as storeOH_qty 
              ,errormessage 
          FROM #TEMP_ScanBadData    
    
          SELECT *
          FROM #TEMP_ScanFinalReport