Archive for category mssql

生成insert语句

在网上能够搜索出的版本主要有两个:
1. CSDN Sky_blue 所作: proc_insert (可 google)
2. CSDN playyuer 所作: spGenInsertSQL (可 google)
但这两个版本的程序都曾收录到:

http://www.cnblogs.com/kasafuma/articles/109922.html

但这两个版本程序都有局限性:
如果字段太多或字段值的内容太多而无法生成完整正确的 insert into … 的 SQL!
varchar 变量容量不够大!

使用下面的工具可以轻松生成:自动生成Insert 语句的小工具

Connection String:数据库连接
SQL: 需要生成insert语句的查询语句,如:select * from aaa where id=11
TableName:生成的insert into到的表名
下载地址:点击我

ms sql server 2000 查询某个库的所有触发器名称

select   *   from   sysobjects   where id in  (select   parent_obj   from   sysobjects where   xtype='TR' )

sqlserver触发器的新增和删除判断

create TRIGGER [triger_users]   ON  [dbo].[tb_userso]
   FOR INSERT,DELETE
   AS
    --删除
   declare @ID varchar(200)
  IF EXISTS(SELECT 1 FROM deleted)
    begin
           select @ID=ID from deleted
           delete xxx where keyid=@ID
    end
  else
    begin
    select @ID=ID from inserted
    insert into xxx(tabse,keyid,flag) values('TBUP',@ID,0)
    end

SQLServer设置了自动增长,而可用空间仍然为0

对SQL Server虽然设置了文件的自动增长,但查看可用空间时,其值为0,而用sp_spaceused 存储过程查看数据库内部空间使用情况,发现unallocated space的值为负值。

这是由于内部页计数出错而导致的,通过使用dbcc updateusage (0)对当前数据库进行页统计,就可以得出正确结果。
有人整理了一下dbcc的用法:http://topic.csdn.net/t/20021216/20/1266927.html

msbase.jar mssqlserver.jar msutil.jar包下载

sqlserver_driver_lib

mssql中清空数据表、获取表的记录数、翻页存储过程、查询重复数据

–获取数据库中的表的记录数,并倒排序

create procedure alltablecount as
declare @name varchar(100)
declare tablecur cursor for select name from sysobjects where xtype= 'u '
create table #tablecount(tablename varchar(100),reccount int)
open tablecur
fetch next from tablecur into @name
while @@fetch_status!=-1
begin
exec ('insert into #tablecount select tablename='''+@name+''',reccount=count(1) from '+@name+' ')
fetch next from tablecur into @name
end
close tablecur
deallocate tablecur
select * from #tablecount order by reccount desc
go
exec alltablecount
drop procedure alltablecount

–清空数据表中的数据

DECLARE tables_cursor CURSOR
   FOR
   SELECT name FROM sysobjects WHERE type = 'U' --选择用户表名
OPEN tables_cursor --打开游标连接
DECLARE @tablename varchar(40)  -- 定义变量
FETCH NEXT FROM tables_cursor INTO @tablename   --结果集中一行一行读取表名
WHILE (@@FETCH_STATUS <> -1)  --判断游标状态
BEGIN
print @tablename
   if(@tablename like 'y_%') EXEC ('TRUNCATE TABLE ' + @tablename)   --清空表中的数据
   FETCH NEXT FROM tables_cursor INTO @tablename  --下一行数据
END
close tables_cursor
DEALLOCATE tables_cursor  --关闭游标
go

–效率最高的翻页存储过程

ALTER  PROCEDURE [dbo].[GetRecordFromPage]
(
@tblName varchar(500),--表名
@PageSize int=20,--页尺寸
@PageIndex int=1,--页码
@IsCount bit=0,--返回记录总数,非0值则返回
@strOrderSyntax varchar(800),---排序的具体语法
@strWhere varchar(5000)='',--查询条件(注意:不要加where)
@fldName varchar(800),
@Onlyzd varchar(50)='',--唯一字段
@Total int output
)
AS
Begin
declare @strSQL nvarchar(2000)--主语句
declare @strTmp varchar(110)--临时变量
declare @strOrder varchar(400)--排序类型
if (CHARINDEX(',',@strOrderSyntax,1)>0)
begin
if @strWhere!=''
set @strSQL=N'select top'+str(@PageSize)+' '+@fldName+ ' from '
+@tblName+' where '+@Onlyzd+'not in'+'(select top'+str((@PageIndex-1)*@PageSize)+' '+@Onlyzd+' from '
+@tblName+' where '+@strWhere+' '+@strOrderSyntax+') and '+@strWhere+ ' ' +@strOrderSyntax
else
set @strSQL=N'select top '+str(@PageSize)+' '+@fldName+' from '
+@tblName+' where '+@Onlyzd+' not in '+'(select top'+str((@PageIndex-1)*@PageSize)+' '+@Onlyzd+' from '
+@tblName+' '+@strOrderSyntax+')'+@strOrderSyntax;
exec sp_executesql @strSQL;
end
else
begin
declare @ordername varchar(100)
if(charindex('desc',@strOrderSyntax,1)>0)
set @strTmp='<(select min'
else
set @strTmp='>(select max'
set @ordername=replace(@strOrderSyntax,'order by','');
set @ordername=replace(@ordername,' desc','');
set @ordername=replace(@ordername,' asc','');
set @ordername=replace(@ordername,' ','');
set @strOrder=@strOrderSyntax
if @PageIndex=1
begin
if @strWhere!=''
set @strSQL='select top '+str(@PageSize)+' '+@fldName+' from '+@tblName+'  where '+@strWhere+' '+@strOrder
else
set @strSQL='select top '+str(@PageSize)+' '+@fldName+' from  '+@tblName+' '+@strOrder
end
else
begin--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL='select top '+str(@PageSize)+' '+@fldName+' from '+@tblName+'  where '+@ordername+' '+@strTmp+' ([tt]) from(select top '+str((@PageIndex-1)*@PageSize)+' '+@ordername+' as tt from '+@tblName+' '+@strOrder+') as tblTmp)'+@strOrder
if @strWhere!=''
set @strSQL='select top '+str(@PageSize)+' '+@fldName+' from '+@tblName+'  where '+@ordername+' '+@strTmp+'([tt]) from (select top '+str((@PageIndex-1)*@PageSize)+' '+@ordername+' as tt from  '+@tblName+' where '+@strWhere+''+@strOrder+') as tblTmp ) and '+@strWhere+' '+@strOrder
end
end
print @strSQL
exec(@strSQL)
--用于计算当前记录数(在分页用到)
if	@strWhere!=''
set @strSQL=N'select @Total=count('+@Onlyzd+') from '+@tblName+' Where ('+@strWhere+')'
else
set @strSQL=N'select @Total=count('+@Onlyzd+') from '+@tblName
exec sp_executesql @strSQL,N'@Total int output',@Total output;
if @Total is Null
set @Total=0;
end

–以下是上面存储过程的原型是:

select top 页大小 *
from table1
where id >
(select max (id) from
(select top ((页码-1)*页大小) id from table1 order by id) as T
)
order by id
--查询重复的记录
select * from onetable where guid in
 (select guid from onetable group by guid having(count(guid))>1)

--查询不重复的记录
select * from onetable where guid not in
 (select guid from onetable group by guid having(count(guid))>1)

Tags: , , ,

pagepeel by webpicasso.de