2017-07-29 32 views
-1

如何在SQL Server中進行級聯?如何在SQL中進行級聯

我寫下面的查詢和它的返回總是空值。我想,如果條件數據存在執行與否

SET @Query = 'SELECT con.ID, BusinessName, FirstName, LastName, con.MobileNo, TelephoneNo,con.Email AS Email, 
      Address1, ISNULL(con.IsActive,0) AS IsActive, ISNULL(Status,0)AS Status, st.Name AS StatusName, ISNULL(st.ColorID,0)AS ColorID, 
      (SELECT TOP 1 cfu.Remark FROM CRM_ContactFollowUp cfu WHERE cfu.ContactID = con.ID ORDER BY ID DESC) AS Remark, con.CreatedBy, 
      emp.Name AS CreatedName,con.CreatedOn, con.DueDate 
      FROM CRM_Contacts con 
      LEFT JOIN CRM_Status st ON st.ID = con.Status 
      LEFT JOIN PMS_Employee emp ON emp.ID=con.CreatedBy 
      WHERE con.OrganizationID='+ Convert(Varchar,@OrganizationID)+' AND('[email protected] +') ORDER BY ID DESC OFFSET ('+ Convert(Varchar,@PageIndex) +') 
      ROWS FETCH NEXT '+ Convert(Varchar,@PageSize) +' ROWS ONLY'; 

      SET @NextQuery ='IF(EXISTS (SELECT con.ID FROM CRM_Contacts con WHERE con.OrganizationID= '+ Convert(Varchar,@OrganizationID)+' AND 
      ORDER BY ID DESC OFFSET ('+ Convert(Varchar,@NextPage) +') ROWS FETCH NEXT '+ Convert(Varchar,@PageSize) +' ROWS ONLY)) 
       SET '+ Convert(Varchar,@IsMoreRecords)+'= 1 
      ELSE 
       SET '+ Convert(Varchar,@IsMoreRecords)+'= 0'; 

      EXEC(@Query); 
      EXEC(@NextQuery); 

這裏是我的完整過程https://jsfiddle.net/npathak56/aLsngae5/

@Query執行正常,但@NextQuery不執行,爲什麼?

+1

提供樣品數據和預期結果。你也可以解釋你想做什麼。查詢沒有意義。 –

+0

注意:你不應該爲你的存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並使用別的東西作爲前綴 - 或者根本沒有前綴! –

+0

@marc_s我正在使用SP,但在這裏我只發佈了查詢,因爲SP太長 –

回答

0

我沒有運行您的程序,因爲它太複雜,本地複製,但我不喜歡這樣的說法:

SET '+ Convert(Varchar,@IsMoreRecords)+'= 1 

在我看來,這應該是

SET @IsMoreRecords = 1 

你想分配一個輸出變量,但是你正在使用它的值。
當然,第二個類似的陳述也是如此。

SET @IsMoreRecords = 0 
0

你最基本的問題是你不能連接使用該方法的單引號內的字符串。 SQL將把這些單引號解釋爲並置函數的一部分,而不是部分字符串。所以,如果你這樣做:

SET @Query = 'SELECT [field] from [table] 
       where [field] like '%%whatevs%%' 
       and [field2] like ' + @var 

你可以看到剛剛與堆棧溢出語法突出顯示%%whatevs%%弦外端,因爲like使用單引號。所以,當你這樣寫時,你的查詢永遠不會工作。