2016-05-13 116 views
0

我做了一個查詢來填充我的表並將其轉換爲存儲過程。查詢結果與存儲過程中的查詢不同

CREATE PROCEDURE [dbo].[sp_getSAPCMTX] 

@sSDate varchar(10), 
@sEDate varchar(10), 
@sBranch varchar(4000) 

AS 

DELETE FROM SAPCMTX 
WHERE DocDate BETWEEN @sSDate AND @sEDate AND 
StoreCode IN (SELECT Item FROM dbo.SplitStrings(@sBranch , ',')) 

INSERT INTO SAPCMTX 
SELECT * FROM Table T0 
WHERE T0.DocDate BETWEEN @sSDate AND @sEDate AND T0.DataSource<>'O' AND 
    T1.TreeType<>'I' AND T0.DocType = 'I' AND 
    StoreCode IN COLLATE DATABASE_DEFAULT IN (SELECT Item FROM 
    dbo.SplitStrings(@sBranch , ',')) 
GO 

要運行它我用這個命令

EXEC [dbo].[sp_getSAPCMTX] 
     @sSDate = '3/8/2016', 
     @sEDate = '3/8/2016', 
     @sBranch = '002' 

它返回33行,但,當我嘗試作爲TSQL單獨運行它返回34行。

DECLARE @sSDate varchar(10) 
DECLARE @sEDate varchar(10) 
DECLARE @sBranch varchar(4000) 

SET @sSDate = '3/8/2016' 
SET @sEDate = '3/8/2016' 
SET @sBranch = '002' 


DELETE FROM SAPCMTX 
WHERE DocDate BETWEEN @sSDate AND @sEDate AND 
StoreCode IN (SELECT Item FROM dbo.SplitStrings(@sBranch , ',')) 

INSERT INTO SAPCMTX 
SELECT * FROM Table T0 
WHERE T0.DocDate BETWEEN @sSDate AND @sEDate AND T0.DataSource<>'O' AND 
    T1.TreeType<>'I' AND T0.DocType = 'I' AND 
    StoreCode IN COLLATE DATABASE_DEFAULT IN (SELECT Item FROM 
    dbo.SplitStrings(@sBranch , ',')) 
GO 

任何想法爲什麼結果有差異,考慮到它基本上是相同的查詢?

+0

好吧 - 看看你回來的額外的行 - 然後你可以更容易地調試爲什麼和什麼。 –

回答

0

這裏有兩種可能性,可以幫助你得到所期望的結果:

SET ANSI_NULLS ON 
GO 
ALTER PROCEDURE [dbo].[sp_getSAPCMTX] 
    -- your code of the procedure 
  • 創建本地屬性和複製的值:

    • SET ANSI_NULLS ON改變過程之前參數:

      ALTER PROCEDURE [dbo].[sp_getSAPCMTX] 
          @sSDate VARCHAR(10) 
          @sEDate VARCHAR(10) 
          @sBranch VARCHAR(4000) 
      AS 
      DECLARE @sDate VARCHAR(10) 
      DECLARE @eDate VARCHAR(10) 
      DECLARE @branch VARCHAR(4000) 
      
      SET @sDate = @sSDate 
      SET @eDate = @sEDate 
      SET @branch = @sBranch 
      
      -- your code of the procedure 
      
  • +0

    我試了第一個仍然是相同的 對於第二個,這就是我所做的只是爲了得到所需的結果,但我仍然想知道爲什麼我需要創建局部變量以獲得正確的輸出 –