MS SQL Server报表生成器报告where子句参数

时间:2016-03-01 16:47:34

标签: sql-server reporting-services reportmanager

我正在处理Microsoft SQL Server报表生成器报表,我遇到了一个我似乎无法克服的问题。

我的报告是大学课程列表。我需要能够显示所有课程或只显示普通教育课程。

有一个课程属性可以与课程相关联。所有通用编辑课程都有一个课程属性,由#后跟3个字母组成。

通过创建一个将#%或%传递给查询的WHERE子句的参数,解决方案似乎非常简单:

  • WHERE factClassAttributes.CourseAttribute LIKE'#%' (创世纪课程)
  • WHERE factClassAttributes.CourseAttribute LIKE'%'(所有课程)

我没有指望的是某些课程没有课程属性,并且使用%不包括课程属性为空值的记录。

然后我想我会尝试将包含WHERE子句的参数设置为一个值,将null设置为另一个值。这会生成一个通用的" rsErrorExecutingCommand"错误信息。

除了在没有WHERE子句的情况下创建相同的报告之外,是否有人建议如何实现此目的?

由于

1 个答案:

答案 0 :(得分:1)

使用可选参数:

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import java.awt.event.*;

public class SplitPaneTest2 extends JFrame {

    public SplitPaneTest2() {

        setTitle( "Splits" );
        setDefaultCloseOperation( EXIT_ON_CLOSE );
        setSize( 400, 400 );

        JPanel panel1 = new JPanel();
        panel1.setLayout(new BorderLayout());

        panel1.add( new JLabel( "Left panel!11111111111111111111" ) );
        JScrollPane scrollPane1 = new JScrollPane(panel1);

        JPanel panel2 = new JPanel();
        panel2.setLayout(new BorderLayout());

        panel2.add( new JLabel( "Right Panel11111111111111111111" ) );
        JScrollPane scrollPane2 = new JScrollPane(panel2);

//        scrollPane2.getVerticalScrollBar().setModel(scrollPane1.getVerticalScrollBar().getModel());
//        scrollPane2.getHorizontalScrollBar().setModel(scrollPane1.getHorizontalScrollBar().getModel());
        new ScrollBarSynchronizer(scrollPane1.getHorizontalScrollBar(), scrollPane2.getHorizontalScrollBar());

        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPane1,
                scrollPane2);
        splitPane.setResizeWeight(0.5);
        add(splitPane);

        setVisible( true );

    }

    public static void main( String[] args ) {
        new SplitPaneTest2();
    }

    static class ScrollBarSynchronizer implements AdjustmentListener
    {
        JScrollBar[] scrollBars;

        public ScrollBarSynchronizer(JScrollBar... scrollBars)
        {
            this.scrollBars = scrollBars;

            for (JScrollBar scrollBar: scrollBars)
                scrollBar.addAdjustmentListener( this );
        }

        @Override
        public void adjustmentValueChanged(AdjustmentEvent e)
        {
            JScrollBar source = (JScrollBar)e.getSource();
            int value = e.getValue();

            for (JScrollBar scrollBar: scrollBars)
            {
                if (scrollBar != source)
                {
                    scrollBar.removeAdjustmentListener( this );
                    scrollBar.setValue( value );
                    scrollBar.addAdjustmentListener( this );
                }
            }
        }
    }

}

或动态替换空值:

WHERE ((@param1 IS NULL) OR (factClassAttributes.CourseAttribute LIKE @param1 +'%'))