研究旧项目, 常用 sql 语句

Posted keatkeat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了研究旧项目, 常用 sql 语句相关的知识,希望对你有一定的参考价值。

1. select all table

select TABLE_NAME
from CodingSystem.INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = BASE TABLE

 

2. select all column name from table

select COLUMN_NAME, TABLE_NAME, DATA_TYPE
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = APInvoiceDTL;

 

3. get column type

declare @table nvarchar(max) = yourTableName;
declare @column nvarchar(max) = yourColumnName;
select DATA_TYPE
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @table AND COLUMN_NAME = @column;

 

4. select table that have some column

select t.TABLE_NAME
from INFORMATION_SCHEMA.TABLES t inner join INFORMATION_SCHEMA.COLUMNS c on t.TABLE_NAME = c.TABLE_NAME
where t.TABLE_TYPE = BASE table and c.COLUMN_NAME = column;

 

5. 寻找一个 值 在任何 table column 出现过

go

use CodingSystem;
declare @value nvarchar(max) = Discount 5 %;  
declare @dataType nvarchar(max) = nvarchar;
CREATE TABLE #Result
(
    tableName nvarchar(max),
    columnName nvarchar(max)
)
select * into #AllTable from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = BASE TABLE order by TABLE_NAME;
declare @TABLE_NAME nvarchar(max);
declare @COLUMN_NAME nvarchar(max);
declare @query nvarchar(max);
declare @count int;
while((select count(*) from #AllTable) > 0)
begin
    select top 1 @TABLE_NAME = TABLE_NAME from #AllTable;
    select * into #AllColumn from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TABLE_NAME and DATA_TYPE = @dataType;
    set @COLUMN_NAME = ‘‘;
    while((select count(*) from #AllColumn) > 0)
    begin 
        select top 1 @COLUMN_NAME = COLUMN_NAME from #AllColumn;

        set @query = Nselect @count = count(*) from  + @TABLE_NAME +  where  + @COLUMN_NAME +  = @value;
        exec sp_executesql 
            @query, 
            N@count int out, @value nvarchar(max), 
            @value = @value,
               @count = @count output;

        if(@count > 0)
        begin
           insert into #Result (tableName, columnName) values (@TABLE_NAME, @COLUMN_NAME);
        end
        delete #AllColumn where COLUMN_NAME = @COLUMN_NAME;
    end 
    delete #AllTable where TABLE_NAME = @TABLE_NAME;
    drop table #AllColumn;
end
select * from #Result;
drop table #Result;
drop table #AllTable;

go

 

6. 查看一个 table 的 column 有没有用到, (全部 row null 就是没有用啦)

go
use CodingSystem;
declare @tableName nvarchar(max) = Item;
-- 如果要 where 的话, 可以创建一个表, 用完后再删除
--select * into Stooges_Item from Item where stooges_status = ‘keep‘;
--drop table Stooges_Item;

select COLUMN_NAME, DATA_TYPE
into #ColumnTable
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @tableName;

CREATE TABLE #Result
(
    columnName nvarchar(max),
    fill int,
    noFill nvarchar(max)
)

declare @COLUMN_NAME nvarchar(max);
declare @DATA_TYPE nvarchar(max);
declare @count int;
declare @query nvarchar(max);
declare @maxCount int;
set @query = Nselect @maxCount = count(*) from  + @tableName;
exec sp_executesql 
        @query, 
        N@maxCount int out, 
        @maxCount = @maxCount output;

while (select count(*) From #ColumnTable) > 0
begin
  select top 1 @COLUMN_NAME = COLUMN_NAME, @DATA_TYPE = DATA_TYPE  from #ColumnTable;
  if(@DATA_TYPE = nvarchar)
  begin 
   set @query = Nselect @count = count(*) from  + @tableName +  where + @COLUMN_NAME + is not null and + @COLUMN_NAME + != @value;
     exec sp_executesql 
            @query, 
            N@count int out, @value nvarchar(max), 
            @value = ‘‘,
               @count = @count output;
  end 
  else 
  begin 
    set @query = Nselect @count = count(*) from  + @tableName +  where + @COLUMN_NAME + is not null;    
      exec sp_executesql 
            @query, 
            N@count int out, 
               @count = @count output;
  end
  print(@COLUMN_NAME);
  insert into #Result (columnName, fill, noFill) values 
  (@COLUMN_NAME, @count, case when @maxCount - @count = 0 then ‘‘ else cast((@count - @maxCount) * -1 as nvarchar(max)) end);
  delete #ColumnTable where COLUMN_NAME = @COLUMN_NAME;
end

select * from #Result;
drop table #ColumnTable;
drop table #Result;


go

 

 

以上是关于研究旧项目, 常用 sql 语句的主要内容,如果未能解决你的问题,请参考以下文章

TFT液晶研究(旧博客迁移)

php代码审计SQL 注入研究

VBA研究用SQL语句读取EXCEL数据例程

如何学习SQL注入基础以及深入研究

数据库查询语句研究

Linq2DB之研究和探索