存储过程中的动态选择查询?

时间:2012-09-06 08:59:53

标签: sql

我的webform包含一些复选框。如果选中了特定复选框,请将列名添加到sp.Like的select查询中 假设有4个复选框,如chklname,chkfname,chkcity,chkmobile。如果我检查 chklname和chkfname,我的查询将是:

SELECT LastName,FirstName FROM table1

如何在sp?

中编写

2 个答案:

答案 0 :(得分:2)

CREATE PROCEDURE ProcName
    @chklname bit,
    @chkfname bit,
    @chkcity bit,
    @chkmobile bit
AS
BEGIN
SET NOCOUNT ON;

    --Only execute the statement if at least one of the checkboxes are set
    if @chklname = 1 or @chkfname = 1 or @chkcity =1 or @chkmobile =1 
        begin
        declare @sqlcommand nvarchar(max) 


        set @sqlcommand = N'Select '

        if @chklname = 1
            set @sqlcommand += N'FirstName '

        if @chkfname = 1
        begin
            if len(@sqlcommand) > 1
                set @sqlcommand += N','
            set @sqlcommand += N'LastName '
        end
        if @chkcity = 1
        begin
            if len(@sqlcommand) > 1
                set @sqlcommand += N','
            set @sqlcommand += N'City '
        end
        if @chkmobile = 1
        begin
            if len(@sqlcommand) > 1
                set @sqlcommand += N','
            set @sqlcommand += N'Mobile '
        end

        set @sqlcommand += N' FROM table1'

        exec sp_executesql @statement = @sqlcommand

    end
END
GO

答案 1 :(得分:0)

这里你能做的最好的事情就是通过前端代码处理select中包含的列名数。

让我们说例如4个复选框,使用只选择2个fname和lname复选框。

所以在构成sql select语句之前的前端,你可以决定用户选择了哪个复选框,哪个没有被选中。基于此,你可以形成正确的select语句。