SQL查询未显示Visual Studio中的DataSet中的列

时间:2012-02-13 06:08:57

标签: sql visual-studio dataset

我在SQL Server 2008中有一个存储过程。我通过@query声明DECLARE @query NVARCHAR(MAX)参数,然后根据发送的数据类型设置此@query然后我使用exec [sys].[sp_executesql] @query执行存储过程。

我遇到的问题是我在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时,数据集就可以正常工作。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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