1. 程式人生 > >Sqlserver根據欄位查詢表和根據欄位值查詢表的幾個方法

Sqlserver根據欄位查詢表和根據欄位值查詢表的幾個方法

-------------Sqlserver根據欄位名稱查詢表(多個欄位值),例如查詢欄位名包含 ibatch和cbatch 的表
SELECT *FROM(
SELECT t2.name 
FROM syscolumns t1,sysobjects t2
WHERE t1.id=t2.id
and t1.NAME='ibatch'
) m
LEFT JOIN
(
SELECT t2.name 
FROM syscolumns t1,sysobjects t2
WHERE t1.id=t2.id
and t1.NAME='cbatch'
) n   ON m.name=n.name

-- 在資料庫執行,Sqlserver根據欄位值查詢那些表包含這個值

-- 判斷要建立的儲存過程名是否存在 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_FindValueInDB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
-- 刪除儲存過程 
drop procedure [dbo].[SP_FindValueInDB] 
GO 
CREATE PROCEDURE [dbo].[SP_FindValueInDB]
(
    @value VARCHAR(1024)

AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sql VARCHAR(1024) 
    DECLARE @table VARCHAR(64) 
    DECLARE @column VARCHAR(64) 
    CREATE TABLE #t ( 
        tablename VARCHAR(64), 
        columnname VARCHAR(64) 
    ) 
    DECLARE TABLES CURSOR FOR 
    SELECT o.name, c.name FROM syscolumns c 
    INNER JOIN sysobjects o ON c.id = o.id 
    WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239) 
    ORDER BY o.name, c.name 
    OPEN TABLES 
        FETCH NEXT FROM TABLES 
        INTO @table, @column 
        WHILE @@FETCH_STATUS = 0 
        BEGIN 
            SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] ' 
            SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') ' 
            SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', ''' 
            SET @sql = @sql + @column + ''')' 
            EXEC(@sql) 
            FETCH NEXT FROM TABLES 
            INTO @table, @column 
        END 
    CLOSE TABLES 
    DEALLOCATE TABLES 
    SELECT * FROM #t 
    DROP TABLE #t 
End




--  exec [SP_FindValueInDB]  '010201'    ---執行儲存過程,傳入要找的值 010201

--  另一個根據欄位值查詢表的方法

----- 根據欄位值查詢表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Full_Search]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
-- 刪除儲存過程 
drop procedure [dbo].[Full_Search] 
GO
CREATE proc Full_Search(@string varchar(50)) 
as 
begin 


declare @tbname varchar(50) 
declare tbroy cursor for select name from sysobjects 
where xtype= 'u ' --第一個遊標遍歷所有的表 


open tbroy 
fetch next from tbroy into @tbname 
while @@fetch_status=0 
begin 


declare @colname varchar(50) 
declare colroy cursor for select name from syscolumns 
where id=object_id(@tbname) and xtype in ( 
select xtype from systypes 
where name in ( 'varchar ', 'nvarchar ', 'char ', 'nchar ') --資料型別為字元型的欄位 
) --第二個遊標是第一個遊標的巢狀遊標,遍歷某個表的所有欄位 


open colroy 
fetch next from colroy into @colname 
while @@fetch_status=0 
begin 


declare @sql nvarchar(1000),@j int 
select @sql= 'select @i=count(1) from '

[email protected] + ' where '+ @colname+ ' like '+ '''%'[email protected]+ '%''' 
exec sp_executesql @sql,N'@i int output',@[email protected] output --輸出滿足條件表的記錄數 
if @j> 0 
BEGIN
select 包含字串的表名[email protected]
--exec( 'select distinct '[email protected]+' from ' [email protected] + ' where '+ @colname+ ' like '+ '''%'[email protected]+ '%''') 
END
fetch next from colroy into @colname 
end 


close colroy 
deallocate colroy 


fetch next from tbroy into @tbname 
end 
close tbroy 
deallocate tbroy 
end 
go


--  exec Full_Search '19344'    ---執行儲存過程,傳入要找的值 010201

相關推薦

Sqlserver根據查詢表根據查詢表方法

-------------Sqlserver根據欄位名稱查詢表(多個欄位值),例如查詢欄位名包含 ibatch和cbatch 的表 SELECT *FROM( SELECT t2.name  FROM syscolumns t1,sysobjects t2 WHERE t1

sql 新增 增加備註 刪除備註

新增備註 /*oracle*/ comment on column 表名.列名 is '備註';/*mysql*/ ALTER TABLE 表名 MODIFY  欄位名 型別 COMMENT '備註'; 刪除表字段 alter table <表名> drop co

List使用Stream流進行集合Collection的各種運算彙總:對BigDecimal求和,某個、最大、最小、平均值,去重,過濾等

       寫Java介面的朋友都知道,Java 8的更新,經常會用到過濾 list<Object> 裡的資料,本文就對List使用Stream流進行集合Collection的各種運算做一個彙總! 優勢:       &nbs

ORACLE 批量插入 主鍵為自增序列 有資料從其他表匯入的 有是固定的

ORACLE 批量插入   主鍵為自增序列   有幾個欄位資料從其他表匯入的 有幾個是固定的 insert into CUSTOMERPRODUCTCATEGORY----------目標表  (CUSTOMERPRODUCTCATEGORYID,ORIGINALID,WE

Java反射常用到的方法,獲取Private,執行其他類的方法,獲取類名

1.引言 已經很久沒有寫過Java程式碼了,寫了一年的的C++,今天看到C++的friend(友元)可以操作一個類的private屬性,突然想到Java的反射,今天用Java寫了一小段程式碼實驗了一下,專案中比較實用。也是在以前做安卓的專案的時候老是聽到師傅說

linux下文件特殊權限設置S沾附T(轉載)

linux 表示 mkdir 文件 執行 pre 體會 針對 min 今天在創建文件的時候,發現了文件權限末尾有個T,之前沒留意過,後來又用c創建(open)了兩個文件來查看,在我沒有指定權限(省略open的第三個參數)的時候,有時還會出現S,雖然還沒弄懂什麽時候會出現S

CSS響應式:根據分辨路加載不同CSS的方法,親測可用

響應 col 但是 max-width width media 總結 屏幕 link 有時候你需要把同一個頁面在手機和pc同時打開,其中有一個辦法就是判斷不同分辨路加載不同的css 小編總結了幾種分別加載css的方法: 1.比較復雜的使用js判斷加載不同css (親

[計算機程式設計C++] 輸入整數顯示十六進八進

12 輸入整數顯示十六進位制和八進位制(10分) 題目內容: 編寫程式,輸入整數,顯示其十進位制、十六進位制和八進位制形式。如輸入31,輸出: -31 -1f -37 輸入:一個整數,注意,可能是負數。 輸出:三個數,十進位制、十六進位制和八進位制,用空格隔開。 提示

【華為】2019校招(字串解壓縮,26進10進制相互轉換)

字串解壓縮,a11b2bac3bad3abcd2,按照數量由少到多的順序,數量相等的按照字典序,輸出 ccccbbbbbdddddaaaaaaaaaaaaaa 竟然自己做了兩個小時,加快程式設計速度,一定加快速度,注重準確性,正式筆試沒有時間除錯。 開始用i,j指標遍歷找到字元和它的出現

其他進制轉化為10進10進制轉化為其他進制(均一函式)c++

今天專門抽出來一點時間來弄一下,進位制轉化的問題,不論是其他進位制轉化為10進位制還是10進位制轉化為其他進位制,均使用同一個函式來完成,只需要手動輸入從哪個進位制轉化為哪個進位制。 程式碼如下: #include <iostream> #include <cmat

16進2進制互轉

 /**     * 2進位制轉換為16進位制     *     * @param b     * @return     */         public static String byte2hex(byte[] b)         { // 二進位制轉16進

28資料一個16資料相互轉換

這種位的轉換其實理解了本質就很容易了,也很基礎。 首先先了解一下bit和Byte,俗稱大B和小b的區別。 一個小b只能代表一個內容(0或者1,其中的一個) 兩個小b可代表4個內容 “2的2次方“ (00,11,01,10) bit意為“位”或“位元”

java 10進5進制互轉 生成的唯一邀請碼

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.LocalDateTime; import java.time.Period; import java.time.ZoneId;

12進20進制計數器

既然選擇了遠方 就只顧風雨兼程 <盜用的> 12進位制計數器原理圖 經過前面的各種摸爬滾打 這個簡直不再話下<小裝一下> 12進位制計數器模擬圖 下面就是20進位制計數器的了 20進位制計數器原理圖 接下來就是模擬圖,

用8進16進制建立字串

開始 #include <string> // 8進位制Oct(octonary) //10進位制Dec(decimal) //16進位制Hex(hexadecimal) int main() { //我想將一個16/8/10進位制的數字賦值給一個int

c語言字串轉換為16進10進制數字

字串轉換為16進位制或者10進位制:1、使用自己編寫的函式。2、使用庫函式。 將字串轉換為16進位制兩種方法的程式碼: #include<stdio.h> #include<string.h> #include<stdlib.h>  in

C語言16拆成高低八高低八合成16資料(1)

#include <stdio.h> #include <stdlib.h> char right,left,temp;//right表示第八位,left表示高八位 int si

輸入一個十進位制整數,設計遞迴函式,將該整數轉化為一個二進位制數。 思考: 如何將一個十進位制數轉化成一個8進16進制數。

1,輸入一個十進位制整數,設計遞迴函式,將該整數轉化為一個二進位制數。思考: 如何將一個十進位制數轉化成一個8進位制和16進位制數。 #include<stdio.h> #define  N  20 int main() { int a,n,c,k,i; cha

Verilog自頂向下設計24進60進制計數器(FPGA)

提供Verilog自頂向下設計24進位制和60進位制計數器(1Hz,頻率可調)並用數碼管動態顯示的程式碼,且兩個程式皆在Basys2開發板上驗證通過。程式思路:首先將程式分為4部分:分頻程式、計數程式、數碼管動態顯示程式、頂部程式。合理安排輸入與輸出介面。注意頂部程式中的連線

mysqloracle的一個漢字占字符

技術分享 AR == details 應該 gravity 為什麽 tail 計算 轉自:http://blog.csdn.net/u011575570/article/details/47414513 以前一直使用oracle11g,一個漢字占3個字節,所以在操作mysq