工作项目总结(二)之数据库操作

20、

--数据导入数据库部分
--Excel导入数据库,无重复导入 
----导入无重复数据
Insert  GWS_Test2
Select convert(datetime,DataTimeAV) DTTime,
Convert(decimal(9, 2),Temp) Temp ,
Convert(decimal(9, 2),Iac) Iac,
Convert(decimal(9, 2),Vac) Vac,
Convert(decimal(9, 2),Fac) Fac,
Convert(decimal(9, 2),Pac) Pac,
Convert(decimal(9, 2),ETotal) ETotal,
convert(Decimal(9,2),EToday) EToday,
Convert(decimal(9, 2),hTotal) hTotal,
Convert(decimal(9, 2),Vpv1) Vpv1,
Convert(decimal(9, 2),Vpv2) Vpv2,
Convert(decimal(9, 2),Vpv3) Vpv3,
Convert(decimal(9, 2),Ipv1) Ipv1,
Convert(decimal(9, 2),Ipv2) Ipv2,
Convert(decimal(9, 2),Ipv3) Ipv3,
Convert(decimal(9, 2),Ppv1) Ppv1,
Convert(decimal(9, 2),Ppv2) Ppv2,
Convert(decimal(9, 2),Ppv3) Ppv3
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="E:\每天导入文件\重复.xls";
User ID=admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 
 as  A
Where Not Exists(
Select * From GWS_Test2
where GWS_Test2.DTTime=A.DataTimeAV)
--(注意主键的名称)


21、

--生成行序号
select id=row_number()over(order by EToday),EToday from GWSPMD_Inverter
--错行相减-------------------
select B.EToday-A.EToday
from 
 (select id=row_number()over(order by EToday),EToday from GWSPMD_Inverter)A
left join 
 (select id=row_number()over(order by EToday),EToday from GWSPMD_Inverter)B
on 
  B.id=A.id+1


22、

--备份数据库到本地磁盘,要注意是否有足够的权限创建文件
BACKUP DATABASE 
GWSPMD TO DISK='F:\D\GWSPMD备份.bak'


23、

--MySQL的最大连接数默认是100

--客户端登录:mysql -uusername -ppassword

--设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

--显示当前运行的Query:mysql> show processlist

--显示当前状态:mysql> show status

--退出客户端:mysql> exit

--查看当前最大连接数:mysqladmin -uusername -ppassword variables |find "max_con"

 

24、

--多数据库查询
select  *  from GWS001.dbo.GWS_Inverter  union all
select  *  from GWS002.dbo.GWS_Inverter  union all
select  *  from GWS003.dbo.GWS_Inverter  union all
select  *  from GWS004.dbo.GWS_Inverter  union all
select  *  from GWS005.dbo.GWS_Inverter   

 

25、

SQL创建sa用户;
(1:外围应用配置器的远程连接修改为:在本地连接和远程连接改为:同时使用TCP/IP、named pipes;重新启动DataBase Engine的服务;
	2:进入management的安全性设置,修改sa为sqlserver登录,权限以及登录均授予,不强制密码策略)
安装后可以在开始》程序》SQL Server2005 中找到。
1.打开,在安全性中,单击右键 选择‘新建”,“登录” 弹出一个对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验证',并输入密码,可以把‘用户下次登录时必须修改密码’取消掉。 点击‘用户映射’,在右面选择要映射的数据库,并在前面打勾!在下面一栏中‘db-owner’和‘public’前面打勾。然后点击'状态'在右面栏中选中"授予"、“启用”,这两项一般是默认的,但如果默认的不是此两项必须改过来,不然是连不上的!点击‘确定’。 
2.找到SQL服务器,单击右键,在弹出的菜单中选择“属性”命令。
弹出一个对话框,单击“安全性”,在“服务器身份验证”下面选择 “SQL SERVER和WINDOWS身份验证模式”,在前面打勾!记得这一步很重要,如果没有这一步你就别想登录成功!然后单击“确定”就可以了!
3:点击属性上面的重新启动,就可以选择SQL SERVER 身份验证模式登录了!输入刚才的用户名和密码就可以登录成功了!
 
26、
SQL SERVER 2005 中sa用户登录和新建用户
用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联'。 

1:打开SQL Server Manager管理器!在左面找到 ‘安全性’- 登录名 - sa ,双击sa 
查看状态中登录是否为“启动”,修改为“启动”; 
2: 找到SQL服务器,在左栏中上面,单击右键,在弹出的菜单中选择“属性”命令。弹出一个对话框,单击“安全性”,在“服务器身份验证”下面选择“SQL SERVER和WINDOWS身份验证模式”,在前面打勾! 
3:重新启动服务就可以选择SQL SERVER 身份验证模式登录了!输入刚才的用户名和密码就可以登录成功了!(重新启动服务) 

新建用户具体的方法是:   
1:打开SQL Server Manager管理器!在左面找到 ‘安全性’ 单击右键 选择‘新建”,“登录” 弹出一个对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验证',并输入密码,可以把‘用户下次登录时必须修改密码’取消掉。 点击‘用户映射’,在右面选择要映射的数据库,并在前面打勾!在下面一栏中‘db-owner’和‘public’前面打勾。然后点击'状态'在右面栏中选中"授予"、“启用”,这两项一般是默认的,但如果默认的不是此两项必须改过来,不然是连不上的!点击‘确定’。 

2:找到SQL服务器,在左栏中上面,单击右键,在弹出的菜单中选择“属性”命令。弹出一个对话框,单击“安全性”,在“服务器身份验证”下面选择“SQL SERVER和WINDOWS身份验证模式”,在前面打勾!记得这一步很重要,如果没有这一步你就别想登录成功!然后单击“确定”就可以了! 

3:重新启动服务就可以选择SQL SERVER 身份验证模式登录了!输入刚才的用户名和密码就可以登录成功了!(重新启动服务)

 

27、

数据库备份文件导入新建数据库
将备份数据库.bak文件导入数据库,需要覆盖原有数据库以及数据表等。 
    首先,新建一个数据库,数据库名和备份文件的名字一样。
    其次,在新建好的数据库上点击右键,点击“任务”-->“还原”-->“数据库",如下图所示:
    然后在目标数据库中选择你刚才新建的数据库,在还原的源中,点击源设备,点击后面的浏览,选中数据库备份文件(bak),在下面的选择用于还原的备份集中就会出现如下图所示的记录:
     然后选中,在选项里面点击”覆盖现有数据库“,最后点击确定就可以了。
     这就算是数据库备份文件导入你本地的数据库中了、、、、


28、

c) 在ACCESS中创建用户并分配权限
ACCESS中,默认情况下存在两个组:“管理员”组和“用户”组。这两个组是不能被删除的。用户“管理员”也是默认创建的,并且是“管理员”组的一部分。所创建的其它用户都会被自动添加到“用户”组中。
默认情况下“管理员”用户使用时不需要任何密码。所以说,我们一直是以管理员分身登录的。但是,一旦为“管理员”用户指定了新密码,那么下一次启动ACCESS时,系统将提示我们输入用户名和密码。这时,根据登录时所用的用户名,权限将生效。
在ACCESS的工具栏中选择工具->安全,就可以设置用户和权限。
d) 工作组信息文件
有关用户、用户名、密码、权限以及其它此类信息的数据全被当作“元数据”。这些元数据存储在表中。所有这类表一起组成“数据词典”。
ACCESS以“系统表”的形式维护此类数据,用户看不到“系统表”。此外,ACCESS还维护着一个称为“工作组信息文件”的文件。该文件存储关于用户的帐号名称、密码及所属的组的详细信息。该文件的默认名称是“System.mdw”,也叫做“工作组”或“系统数据库”。ACCESS启动时将读取该文件,并确认用户名和密码。如果该文件丢失或损坏,ACCESS将无法启动。必须进行重新安装。
由于未经授权的用户很容易创建另一个版本的工作组文件以非法获得管理员权限。所以管理员用户有必要创建一个新的工作组文件,以提高系统的安全性。
四、压缩数据库
删除数据库数据时,数据库通常会变得支离破碎。RDBMS提供了“压缩”功能重新安排数据在磁盘中的存储方式。ACCESS提供了“压缩和修复数据库”实用程序来完成这个任务。
五、备份数据库
数据库中包含对任何应用程序都很关键的数据。因此要对它进行保护。需要将它在一个安全的地方。
备份数据库涉及制作两个文件的副本:数据库本身和“System.mdw”(包括用户新创建的工作组信息文件)文件。
六、导入和链接数据
某些RDBMS提供了将以其它格式在座的数据转入数据库的方法。ACCESS提供了“导入”和“链接”数据的方法。
“导入”会在ACCESS中创建现有数据的副本。它会在ACCESS中新建表,并拥有源表中所包含的数据。
“链接”只会在ACCESS中创建和维护与数据源中数据的链接。因此它将直接修改源数据。


28、

--多数据库设计:现有为在web.Config中添加连接字符串:

同时使用类进行函数调用ConnDB.cs/MemberDB.cs

在页面进行调用时声明:

               private ConnDB conn = null;/

29、
.使用触发器对2个表同时更新:  创建表Inv、DataInv
use GWS001
if exists(select * From Sysobjects where  name='Inv')
drop table Inv
Create table Inv(
DTTime datetime primary key ,
ApPower  decimal(9,1),
Vac decimal(9,3), 
Iac decimal(9,3),
Pac decimal(9,1),
DE decimal(9,2),
NE decimal(9,2)
)
Go


use GWS001
if exists(select * From sysobjects where  name='DataInv')
 drop table DataInv
Create table DataInv(
DTTime datetime primary key ,
MaxApPowerTime datetime,
MaxApPower  decimal(9,1),
AvgApPower  decimal(9,1),
MaxVacTime datetime,
MaxVac decimal(9,3),
AvgVac decimal(9,3),
MaxIacTime datetime,
MaxIac decimal(9,3),
AvgIac decimal(9,3),
MaxPacTime datetime,
MaxPac decimal(9,1),
AvgPac decimal(9,1),
Pac decimal(9,1),
DE decimal(9,2),
NE decimal(9,2),
TodayDE decimal(9,2),
TodayNE decimal(9,2) 
)
go


 
-------两个表同时更新
--Use GWS001 
--drop TRIGGER  tg_inv
Create TRIGGER tg_inv ON Inv
AFTER INSERT
AS 
BEGIN
  declare @InvDTTime datetime
  declare @DataInvDTTime datetime
  select @InvDTTime=DTTime from inserted  -- 获取当前插入Inv表的DTTime.
  select @DataInvDTTime=isnull(max(DTTime),getdate()) 
       from DataInv -- 获取DataInv表的最大DTTime.
  if datediff(mi,@DataInvDTTime,@InvDTTime)>2  -- 如果最大DTTime小于当前DTTime 3分钟.
  begin
   Insert into DataInv  -- 插入DataInv表统计信息.
   Select top 1 DTTime,MaxApPowerTime,MaxApPower,AvgApPower,MaxVacTime,MaxVac,AvgVac,
    MaxIacTime,MaxIac,AvgIac,MaxPacTime,MaxPac,AvgPac,Pac,DE,NE,TodayDN,TodayEN
    from 
    (Select 1 as Sn,DTTime,Pac,DE,NE
     from Inv where DTTime in (Select Max(DTTime) From Inv))as A,
    (Select 1 as Sn,DTTime as MaxPacTime,Pac as MaxPac From Inv  
     where Pac in (Select Max(Pac) From Inv) and DTTime>@DataInvDTTime and DTTime<=dateadd(mi,3,@DataInvDTTime)) as B,
    (Select 1 as Sn,
      Convert(decimal(9,1),Avg(ApPower)) as AvgApPower,
      Convert(decimal(9,3),Avg(Vac)) as AvgVac,
      Convert(decimal(9,3),Avg(Iac)) as AvgIac,
      Convert(decimal(9,1),Avg(Pac)) as AvgPac From Inv) as C,
    (Select 1 as Sn,DTTime as MaxVacTime,Vac as MaxVac From Inv  
      where Vac in (Select Max(Vac) From Inv) and DTTime>@DataInvDTTime and DTTime<=dateadd(mi,3,@DataInvDTTime)) as D,
    (Select 1 as Sn,DTTime as MaxIacTime,Iac as MaxIac From Inv  
      where Iac in (Select Max(Iac) From Inv) and DTTime>@DataInvDTTime and DTTime<=dateadd(mi,3,@DataInvDTTime)) as E,
    (Select 1 as Sn,DTTime as MaxApPowerTime,ApPower as MaxApPower From Inv  
      where ApPower in (Select Max(ApPower) From Inv) and DTTime>@DataInvDTTime and DTTime<=dateadd(mi,3,@DataInvDTTime)) as F,
    (Select 1 as Sn,Max(DE)-Min(DE) as TodayDN,Max(NE)-Min(NE) as TodayEN
      From Inv  where DTTime>@DataInvDTTime and DTTime<=dateadd(mi,3,@DataInvDTTime)) as G
    where A.Sn=B.Sn and B.Sn=C.Sn and C.Sn=D.Sn and D.Sn=E.Sn 
          and E.Sn=F.Sn and F.Sn=G.Sn
  end
END
(上述触发器存在问题,并非按照3分钟来处理数据以及筛选最大值等)

 
  

30、

--不同表名,插入数据(表结构完全相同)
Create Procedure pd_Insert 
 @DBTable varchar(50),
 @id int,
 @name varchar(50)
AS
Declare @Sql Varchar(2000)
Set @Sql='Insert into '
begin
set @Sql=@Sql+@DBTable+'values('+@id+','+@name+') '
end 
exec @Sql
Go


--创建表A:
Create table A
(
 id int   primary key,
 name varchar(50)
)
--创建存储过程:
----不同表名,插入数据
--drop proc pd_Insert
Create Procedure pd_Insert(@DBTable varchar(50))
AS
Declare @Sql nVarchar(500) 
begin
set @Sql='Insert into '+@DBTable +' values(3,''qwe'')'
end 
exec sp_executesql @Sql
Go

 --执行语句:
 exec pd_Insert A

-------------------
Create Procedure pd_Insert1(
@DBTable varchar(50),
@id int,
@name varchar(50)
)
AS
Declare @Sql nVarchar(500) 
begin
set @Sql=N'Insert into '+@DBTable +' values('+ltrim(@id)+',''+@name+'')'
end 
exec sp_executesql @Sql
Go
--执行:
exec  pd_Insert  A,4,'asdasdafs'
--结果:
4	+@name+

31、

--输入数据库表名。以及参数等进行数据插入:成功
Create Procedure pd_Insert(
@DBTable varchar(50),
@id int,
@name varchar(50)
)
AS
Declare @Sql nVarchar(500) 
begin
set @Sql=N'Insert into '+@DBTable +' values('''+ltrim(@id)+''','''+ltrim(@name)+''')'
end 
exec sp_executesql @Sql
Go
--执行:
exec  pd_Insert  A,7, 'asdasdafs'
--(执行exec  pd_Insert  A,7, asdasdafs 也是相同结果)
--插入结果为: 
2	1222
3	qwe
4	+@name+
5	asdasdafs
6	asdasdafs
7	asdasdafs 
set @sql = N'insert into oop (id,[name],style) values ('''+ltrim(@oopcount)+''','''+@aa+''','''+@bb+''')'
--相当于
insert into oop (id,[name],style) values ('xx','yy','zz')


--存储过程时间处理:
SET @cmd=@cmd+' where contract.sign_date<='+@end_date
->
SET @cmd=@cmd+' where contract.sign_date<='''+CONVERT(VARCHAR(10),@end_date,120)+''''


----批量插入100条新数据
use GWS
--创建数据表
Create Table Test3(
ID uniqueidentifier  Primary key,
userNo nvarchar(50) ,
password nvarchar(255) ,
lastName nvarchar(255) ,
firstName nvarchar(255) 
)

--执行插入100条数据
declare @i int,@value nvarchar
begin
    set @i=1 --初始化   
while @i<=100    
    begin
        INSERT INTO   Test3(id,userNo,password,firstName,lastName)
        VALUES(NewID(),'test0000'+cast(@i as nvarchar),'test0000'+cast(@i as nvarchar),'张','0000'+cast(@i as nvarchar))
        set @i=@i+1
    end
end
32、
--创建存储过程
-- 创建临时表
        Create TABLE #temp(
            UID int identity(1, 1) PRIMARY KEY,
            UserName varchar(16),
            Pwd varchar(50),
            Age smallint,
            Sex varchar(6)
        )
        -- 打开临时表
        Select * from #temp

-- 存储过程
        -- 要创建存储过程的数据库
        Use Test
        -- 判断要创建的存储过程名是否存在
            if Exists(Select name From sysobjects Where name='csp_AddInfo' And

type='P')
            -- 删除存储过程
            Drop Procedure dbo.csp_AddInfo
        Go
                
                
        -- 创建存储过程
        Create Proc dbo.csp_AddInfo
        -- 存储过程参数
        @UserName varchar(16),
        @Pwd varchar(50),
        @Age smallint,
        @Sex varchar(6)
        AS
        -- 存储过程语句体
        insert into Uname (UserName,Pwd,Age,Sex)
            values (@UserName,@Pwd,@Age,@Sex)
        RETURN
        -- 执行
        GO
                
        -- 执行存储过程
        EXEC csp_AddInfo 'Junn.A','123456',20,'男'

--本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mx1029/archive/2007/07/06/1680910.aspx

 

 

33、

--根据查询获取的表名去查询该表
if exists (select 1
          from sysobjects
          where  id = object_id('pd_getTableData')
          and type in ('P','PC'))
   drop procedure pd_getTableData
go

create procedure pd_getTableData 
(
@tableName Varchar(50)
)
as 
Exec ('Select * From '+@tableName)
go

----------
   declare @TName varchar(50) 
   select @TName=Instrument_TableName from GWSPSD_IL where IL_flg='0'
	and InstrumentList_id='1'
   exec pd_getTableData @TName
   go


34、

--存储过程中定义varchar应该修改为NVarchar

 

35、

--存储过程 传入表名以及待插入数据
--存在多个表结构相同时使用,
--传入表名以及数据
if  exists(Select * From sysobjects  where name='Test')
	Drop Table Test

Create Table Test
(
	id int identity(1,1) primary key,
	Date datetime,
	Characters varchar(50),
	Del_flg Char(1)
)

--创建存储过程InsertTest
if exists(Select 1 From sysobjects 
			 where id=object_id('InsertTest') and type in ('P','PC'))
Drop procedure InsertTest
GO

Create procedure InsertTest
(
	@TableName varchar(50),
	@Date datetime,
	@Characters varchar(50),
	@Del_flg Char(1)
)
AS 
	Begin
		DeClare @SqlStr NVarchar(2000)
		Set @SqlStr='Insert into '+@TableName+'(Date,Characters,Del_flg) Values(
		@Date,@Characters,@Del_flg)'
		Exec sp_executesql @SqlStr,N'@Date datetime,@Characters varchar(50),@Del_flg Char(1)',
		@Date,@Characters,@Del_flg
	if @@RowCount<1
		return 0
	else
		return 1
End
GO

--测试存储过程InsertTest
Exec InsertTest 'Test','2011-6-23 14:00',aaaaa,0

--执行结果查询
Select * From Test


 

 

 
  
 



 

你可能感兴趣的:(编程汇总)