存储过程 - 除了给定的列之外,清除列

时间:2011-10-14 14:40:38

标签: sql sql-server-2008

有没有办法使用动态SQL清除给定表中的所有列,但传入的列除外?

示例 - 我有一个将来会添加列的表,但它总是有一组我不想删除的列。

CREATE procedure [dbo].[sp_clearTable](

@columnExclusionList varchar(500),
@tableName varchar(100)
)

AS
BEGIN

in @tableName, clear all columns except those in @columnExclusionList

go

1 个答案:

答案 0 :(得分:1)

是的,有几点需要注意。

  1. 你特定的SQL品牌(你不知道它的ms sql,oracle,sqlite等)是否必须实现像information_schema和
  2. 这样的东西
  3. 主键必须在排除的列中,或者您不能拥有主键(几乎总是一个灾难性的决定)。
  4. 那说:

    Declare @columns varchar(max);
    Set @columns='';
    Select @columns = @columns + column_name +','
    From information_schema.columns
    Where table_name = @tablename;
    

    在T-SQL(SQL Server)中给出逗号分隔值的列表。如何处理排除列表取决于版本和产品。在SQL Server 2008中,您可以使用表值参数,或者可以使用字符串拆分将值放入temptable / variable中。

    我不知道你的设计,但我建议仔细考虑它,因为这绝对是不寻常的 - 这可能不是你应该采取的方法来解决你想要解决的任何问题,但它可以做到。