在SQL2008查找某数据库中的列是否存在某个值

系统 1627 0
原文: 在SQL2008查找某数据库中的列是否存在某个值

在SQL2008查找某数据库中的列是否存在某个值

      
        --
      
      
        SQL2008查找某数据库中的列是否存在某个值
      
      
        create
      
      
        proc
      
      
         spFind_Column_In_DB

(

    
      
      
        @type
      
      
        int
      
      ,
      
        --
      
      
        类型:1为文字类型、2为数值类型
      
      
        @str
      
      
        nvarchar
      
      (
      
        100
      
      )
      
        --
      
      
        需要搜索的名字
      
      
        )


      
      
        as
      
      
        --
      
      
        创建临时表存放结果
      
      
        create
      
      
        table
      
       #tbl(PK 
      
        int
      
      
        identity
      
      
        primary
      
      
        key
      
      
         ,tbl sysname,col sysname)

    
      
      
        declare
      
      
        @tbl
      
      
        nvarchar
      
      (
      
        300
      
      ),
      
        @col
      
       sysname,
      
        @sql
      
      
        nvarchar
      
      (
      
        1000
      
      
        )

    
      
      
        if
      
      
        @type
      
      
        =
      
      
        1
      
      
        begin
      
      
        declare
      
       curTable 
      
        cursor
      
      
         fast_forward

        
      
      
        for
      
      
        select
      
      
        '
      
      
        [
      
      
        '
      
      
        +
      
      SCHEMA_NAME(SCHEMA_ID)
      
        +
      
      
        '
      
      
        ].[
      
      
        '
      
      
        +
      
      o.name
      
        +
      
      
        '
      
      
        ]
      
      
        '
      
       tableName,
      
        '
      
      
        [
      
      
        '
      
      
        +
      
      c.name
      
        +
      
      
        '
      
      
        ]
      
      
        '
      
       columnName 
      
        from
      
       sys.columns c 
      
        inner
      
      
        join
      
       sys.objects o 
      
        on
      
       c.
      
        object_id
      
      
        =
      
      o.
      
        object_id
      
      
        where
      
       o.type_desc
      
        =
      
      
        '
      
      
        user_table
      
      
        '
      
      
        and
      
       user_type_id 
      
        in
      
       (
      
        167
      
      ,
      
        175
      
      ,
      
        231
      
      ,
      
        239
      
      ,
      
        35
      
      ,
      
        99
      
      
        )

     
      
      
        end
      
      
        else
      
      
        begin
      
      
        declare
      
       curTable 
      
        cursor
      
      
         fast_forward

        
      
      
        for
      
      
        select
      
      
        '
      
      
        [
      
      
        '
      
      
        +
      
      SCHEMA_NAME(SCHEMA_ID)
      
        +
      
      
        '
      
      
        ].[
      
      
        '
      
      
        +
      
      o.name
      
        +
      
      
        '
      
      
        ]
      
      
        '
      
       tableName,
      
        '
      
      
        [
      
      
        '
      
      
        +
      
      c.name
      
        +
      
      
        '
      
      
        ]
      
      
        '
      
       columnName 
      
        from
      
       sys.columns c 
      
        inner
      
      
        join
      
       sys.objects o 
      
        on
      
       c.
      
        object_id
      
      
        =
      
      o.
      
        object_id
      
      
        where
      
       o.type_desc
      
        =
      
      
        '
      
      
        user_table
      
      
        '
      
      
        and
      
       user_type_id 
      
        in
      
       (
      
        56
      
      ,
      
        48
      
      ,
      
        52
      
      ,
      
        59
      
      ,
      
        60
      
      ,
      
        62
      
      ,
      
        106
      
      ,
      
        108
      
      ,
      
        122
      
      
        )

    
      
      
        end
      
      
        open
      
      
         curtable

    
      
      
        fetch
      
      
        next
      
      
        from
      
       curtable 
      
        into
      
      
        @tbl
      
      ,
      
        @col
      
      
        while
      
      
        @@FETCH_STATUS
      
      
        =
      
      
        0
      
      
        begin
      
      
        set
      
      
        @sql
      
      
        =
      
      
        '
      
      
        if exists (select * from 
      
      
        '
      
      
        +
      
      
        @tbl
      
      
        +
      
      
        '
      
      
         where 
      
      
        '
      
      
        if
      
      
        @type
      
      
        =
      
      
        1
      
      
        begin
      
      
        set
      
      
        @sql
      
      
        +=
      
      
        @col
      
      
        +
      
      
        '
      
      
         like 
      
      
        ''
      
      
        %
      
      
        '
      
      
        +
      
      
        @str
      
      
        +
      
      
        '
      
      
        %
      
      
        ''
      
      
        )
      
      
        '
      
      
        end
      
      
        else
      
      
        begin
      
      
        set
      
      
        @sql
      
      
        +=
      
      
        @col
      
      
        +
      
      
        '
      
      
         in (
      
      
        '
      
      
        +
      
      
        @str
      
      
        +
      
      
        '
      
      
        ))
      
      
        '
      
      
        end
      
      
        set
      
      
        @sql
      
      
        +=
      
      
        '
      
      
         INSERT #TBL(tbl,col) VALUES(
      
      
        '''
      
      
        +
      
      
        @tbl
      
      
        +
      
      
        '''
      
      
        ,
      
      
        '''
      
      
        +
      
      
        @col
      
      
        +
      
      
        '''
      
      
        )
      
      
        '
      
      
        --
      
      
        print @sql
      
      
        exec
      
       (
      
        @sql
      
      
        )

        
      
      
        fetch
      
      
        next
      
      
        from
      
       curtable 
      
        into
      
      
        @tbl
      
      ,
      
        @col
      
      
        end
      
      
        close
      
      
         curtable 

    
      
      
        deallocate
      
      
         curtable

    
      
      
        select
      
      
        *
      
      
        from
      
      
         #tbl




      
      
        --
      
      
        使用例子,查询库中存在aaa这个值的列:
      
      
        exec
      
        spFind_Column_In_DB  
      
        1
      
      ,
      
        '
      
      
        aaa
      
      
        '
      
    

 

在SQL2008查找某数据库中的列是否存在某个值


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论