2012-02-13 53 views
0

我已經在SQL Server 2008的存儲過程我經由DECLARE @query NVARCHAR(MAX)申報@query PARAM在數據集的列,我然後根據在發送的數據的類型來設置此@query然後我使用exec [sys].[sp_executesql] @query到執行存儲過程。SQL查詢沒有顯示在Visual Studio

我遇到的問題是我在Visual Studio中使用DataSet,鏈接到此存儲過程(用於報表)。

當我以這種方式(使用@query)執行存儲過程時,數據集不會拾取要顯示的列數據。我不得不創建存儲過程這樣(與@query),因爲我需要在where子句取決於發送的數據是不同的

我的代碼:

CREATE PROCEDURE [dbo].[p_Test_GetFooData] 
    @pName VARCHAR(250) = '', 
    @pID INT = NULL 
AS 
    BEGIN 
     DECLARE @query NVARCHAR(MAX) 

     SET @query = 'SELECT FOO.FirstName, FOO.LastName 
       FROM Test.FooOne AS FOO' 

     IF (@pName = '--- SELECT ---') 
      BEGIN 
       SET @query = @query + ' WHERE FOO.ID = ' 
        + CONVERT(VARCHAR(50), @pID) + '' 
      END 
     ELSE 
      BEGIN 
       SET @query = @query + ' WHERE FOO.ID = ' 
        + CONVERT(VARCHAR(50), @pID) + ' AND 
              PP.FirstName + LIKE ''%' + @pName 
        + '%'' ' 
      END 
     EXEC [sys].[sp_executesql] @query   
    END 

我已經測試過的查詢和它在我運行存儲過程時返回正確的數據。當我不使用SET @query = 'SELECT STATEMENT' EXEC @query時,數據集按照它應該的那樣工作。

任何幫助將不勝感激。

+0

數據集是無法確定的列是什麼原因他們可能會有所不同。即使你正在設置要返回的列而沒有改變它們,你可能會有這種可能性。因此數據集不會設置任何列。你可以手動添加這些。 – 2012-02-13 06:14:10

+0

此查詢無法正常工作。查詢中存在語法錯誤。請在這裏再次粘貼查詢.... – 2012-02-13 06:16:10

+0

'---選擇'。在這裏,兩個破折號將該行標記爲註釋,因此它會忽略結尾引號('''),並且會發生語法錯誤... – 2012-02-13 06:18:14

回答

0

另一種選擇是以不同的方式編寫查詢,例如。

SELECT FOO.FirstName,  
     FOO.LastName    
FROM Test.FooOne AS FOO 
WHERE FOO.ID = @pID 
and PP.FirstName LIKE case when @pName = '--- Select ---' then PP.FirstName else '%' + @pName + '%' end 

這將始終比較Foo.ID到@pID 並要麼比較pp.FirstName本身(總是返回TRUE)或WIL

相關問題