如何定义和修改合并项目的参数化行筛选器 (SQL Server Management Studio)

可在新建发布向导的**“筛选表行”页上或在“发布属性 - <发布>”对话框的“筛选行”**页上定义、修改和删除参数化行筛选器。 有关使用该向导和访问此对话框的详细信息,请参阅如何创建发布和定义项目 (SQL Server Management Studio)如何查看和修改发布属性以及项目属性 (SQL Server Management Studio)

注意注意

初始化对发布的订阅之后,如果要在“发布属性 - <发布>”对话框中添加、修改或删除参数化行筛选器,就必须在更改后生成新的快照并重新初始化所有订阅。 有关属性更改要求的详细信息,请参阅更改发布和项目属性

定义参数化行筛选器

  1. 在新建发布向导的**“筛选表行”页上或在“发布属性-<发布>”对话框的“筛选行”页上,单击“添加”,然后单击“添加筛选器”**。

  2. 在**“添加筛选器”**对话框中,从下拉列表框中选择要筛选的表。

  3. 在**“筛选语句”文本框中创建一个筛选语句。 您可以在文本区域中直接键入,也可以从“列”**列表框中拖放列。

    • **“筛选语句”**文本区域包括默认的文本,其格式为:

      SELECT <published_columns> FROM [tableowner].[tablename] WHERE
      
    • 默认文本无法更改;请使用标准的 SQL 语法在 WHERE 关键字后键入筛选子句。 参数化筛选器包括对系统函数 HOST_NAME() 和/或 SUSER_SNAME() 的调用,或者对引用这两个函数之一或全部的用户定义函数的调用。 以下是参数化行筛选器的一个完整筛选子句的示例:

      SELECT <published_columns> FROM [HumanResources].[Employee] WHERE LoginID = SUSER_SNAME()
      

      WHERE 子句应使用由两部分构成的命名方式,不支持由三部分和四部分构成的命名方式。

      重要说明重要提示

      为提高性能,建议您不要在参数化行筛选器子句中对列名应用函数,如 LEFT([MyColumn]) = SUSER_SNAME()。 如果在筛选子句中使用 HOST_NAME 并覆盖 HOST_NAME 值,就可能需要使用 CONVERT 来转换数据类型。 有关针对这种情况的最佳方法的详细信息,请参阅参数化行筛选器主题中的“覆盖 HOST_NAME() 值”部分。

  4. 选择指示订阅服务器之间如何共享数据的选项:

    • 此表中的行将转到多个订阅

    • 此表中的行将仅转到一个订阅

    如果选择**“此表中的行将仅转到一个订阅”**,则合并复制可以通过存储和处理较少的元数据来优化性能。 但是,必须确保在对数据分区时不能将行复制到多个订阅服务器。 有关详细信息,请参阅主题参数化行筛选器中的“设置‘分区选项’”部分。

  5. 单击“确定”。

  6. 如果在**“发布属性 - <发布>”对话框中,请单击“确定”**保存并关闭对话框。

修改参数化行筛选器

  1. 在新建发布向导的**“筛选表行”页或“发布属性 - <发布>”“筛选行”页上,从“筛选的表”窗格中选择筛选器,然后单击“编辑”**。

  2. 在**“编辑筛选器”**对话框中,修改筛选器。

  3. 单击“确定”。

删除参数化行筛选器

  • 在新建发布向导的**“筛选表行”页或“发布属性 - <发布>”“筛选行”页上,从“筛选的表”窗格中选择筛选器,然后单击“删除”**。