sql 操做經常使用操做語句 新增、修改字段等

經常使用sqlsql

 
 
--查詢數據庫鏈接數
SELECT * FROM master.dbo.sysprocesses WHERE dbid IN
(
SELECT dbid FROM master.dbo.sysdatabases
WHERE NAME='數據庫表名'
)

--查詢鎖表
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName 
from sys.dm_tran_locks where resource_type='OBJECT'
ORDER BY request_session_id

--殺掉進程
declare @spid int 
Set @spid = 182 --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)

  

--遠程查詢
--開戶外圍

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

-------------------------------
select * from openrowset( 'SQLOLEDB', '服務器ip'; '數據庫登陸帳號'; '數據庫登陸密碼',數據庫名.dbo.表名)
-------------------------------

--關閉外圍

exec sp_configure 'show advanced options',0
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure

  


--壓縮備份

Declare @strDataBaseName varchar(50)數據庫

Declare @FullFileName varchar(50) 緩存

Set @strDataBaseName='data'服務器

Set @FullFileName='d:\db_backup\data20170222.bak'
BACKUP DATABASE @strDataBaseName TO DISK = @FullFileName WITH INIT, STATS = 20
session





--
sql 事務 BEGIN TRAN 事物名 IF(@@ERROR<>0)BEGIN ROLLBACK TRAN 事物名;RETURN;END COMMIT TRAN 事物名 --數據庫清緩存 DBCC DROPCLEANBUFFERS --忽略自增列 按照sql語句的id新增 SET IDENTITY_INSERT [dbo].[EduMenuFunction] ON --插入語句 SET IDENTITY_INSERT [dbo].[EduMenuFunction] OFF --修改語句聯表修改 UPDATE S_GB_StudentBasicInfo SET BH =ci.BH from S_GB_StudentBasicInfo sbi WITH(NOLOCK),C_GB_ClassInfo ci WITH(NOLOCK) where sbi.BJID=CONVERT(nvarchar(20),ci.ID) UPDATE A SET A.c2 =B.c3 from A inner join B on A.c1=B.c1 --建立索引 CREATE INDEX DataReportIndex ON S_GB_StudentBasicInfo_DataReport(SFZJH (ASC), XB (ASC), CSRQ (ASC), DataYear (ASC), STATUS (ASC)) --修改字段默認值 alter table 表名 drop constraint 約束名字 ------說明:刪除表的字段的原有約束 alter table 表名 add constraint 約束名字 DEFAULT 默認值 for 字段名稱 -------說明:添加一個表的字段的約束並指定默認值 --修改字段名: alter table 表名 rename column A to B --修改字段類型: alter table 表名 alter column UnitPrice decimal(18, 4) not null --增長字段: alter table 表名 ADD 字段 類型 NOT NULL Default 0 --添加字段 [CardRecord][Birthday] IF NOT EXISTS( SELECT * from syscolumns where [id]=object_id('CardRecord') AND [name]='Birthday' ) BEGIN Alter Table CardRecord Add Birthday DATETIME NOT NULL DEFAULT('1900-01-01 00:00:00') ; EXEC sp_addextendedproperty 'MS_Description', '出生日期', 'user', dbo, 'table',CardRecord, 'column', Birthday; END --清除表數據,自增列從1開始 truncate table 表名; --查詢全部的子節點 with cte as ( select * from Base_Company where Id = 'E7F5395E-6D11-4490-B3AD-513574268CF6' --查詢節點 union all select a.* from Base_Company a join cte b on a.ParentId = b.id where a.id is not null ) select * from cte --建立數據庫 USE master create database AdayMS on primary -- 默認就屬於primary文件組,可省略 ( /*--數據文件的具體描述--*/ name='AdayMS_data', -- 主數據文件的邏輯名稱 filename='E:\數據庫\jaday\AdayMS\AdayMS_data.mdf', -- 主數據文件的物理名稱 size=5mb, --主數據文件的初始大小 maxsize=100mb, -- 主數據文件增加的最大值 filegrowth=15%--主數據文件的增加率 ) log on ( /*--日誌文件的具體描述,各參數含義同上--*/ name='AdayMS_log', filename='E:\數據庫\jaday\AdayMS\AdayMS_log.ldf', size=2mb, filegrowth=1mb ) --根據時間篩選 datediff(dd,時間字段,當前時間)>=0 --獲取新增數據的標識列 insert語句;select @@IDENTITY --獲取數據庫表和視圖中的全部字段 SELECT 列序號 = A.COLORDER, 列名 = A.NAME, --主鍵 = CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE= 'PK ' AND PARENT_OBJ=A.ID AND NAME IN ( --SELECT NAME FROM SYSINDEXES WHERE INDID IN( --SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID))) THEN '√ ' ELSE ' ' END, 類型 = B.NAME, --容許空 = CASE WHEN A.ISNULLABLE=1 THEN '√ 'ELSE ' ' END, 列說明 = ISNULL(G.[VALUE], ' ') FROM SYSCOLUMNS A LEFT JOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE INNER JOIN SYSOBJECTS D ON A.ID=D.ID AND D.XTYPE= 'U ' AND D.NAME <> 'DTPROPERTIES ' LEFT JOIN SYSCOMMENTS E ON A.CDEFAULT=E.ID LEFT JOIN sys.extended_properties G ON A.ID=G.major_id AND A.COLID=G.minor_id LEFT JOIN sys.extended_properties F ON D.ID=F.major_id AND F.minor_id=0 WHERE (D.name='@TableName' ) ORDER BY A.ID,A.COLORDER --視圖 SELECT 列序號 = A.COLORDER, 列名 = A.NAME, --主鍵 = CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE= 'PK ' AND PARENT_OBJ=A.ID AND NAME IN ( --SELECT NAME FROM SYSINDEXES WHERE INDID IN( --SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID))) THEN '√ ' ELSE ' ' END, 類型 = B.NAME, --容許空 = CASE WHEN A.ISNULLABLE=1 THEN '√ 'ELSE ' ' END, 列說明 = ISNULL(G.[VALUE], ' ') FROM SYSCOLUMNS A LEFT JOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE INNER JOIN SYSOBJECTS D ON A.ID=D.ID AND d.xtype='V' AND D.NAME <> 'dtproperties ' LEFT JOIN SYSCOMMENTS E ON A.CDEFAULT=E.ID LEFT JOIN sys.extended_properties G ON A.ID=G.major_id AND A.COLID=G.minor_id LEFT JOIN sys.extended_properties F ON D.ID=F.major_id AND F.minor_id=0 WHERE (D.name='@ViewName' ) GROUP BY A.COLORDER ,A.NAME ,B.NAME ,ISNULL(G.[VALUE], ' ') ,A.ID ORDER BY A.ID,A.COLORDER --觸發器 ALTER TRIGGER [TRG_QBItem] ---------項觸發器------------------- ON [dbo].[QBItem] FOR delete AS delete from QBOptions where ItemId in (select ItemId from deleted) --計算執行sql語句的時間 --首先 在各個sql 執行語句前加: declare @time datetime set @time=getdate() --而後在sql執行語句後加上: select [語句執行花費時間(毫秒)]=datediff(ms,@time,getdate())

 1,只是插入簡單的有限行數據時用:

     insert 要插入的表名(列名1,列名2,....)

     select '列名1須要的數據','列名2須要的數據',... union

      select '列名1須要的數據','列名2須要的數據',... union

      select '列名1須要的數據','列名2須要的數據',...

     ... ...
例如:

insert into MyTable2
(學號,姓名,性別,出生日期,學院編碼,成績)
select '05001001','張三玉','女','1987-10-5','01',88 union
select '05001002','李斯','男','1986-4-18','01',76 union
select '04013029','王武','男','1986-5-18','03',94 union
select '04013030','王小琳','女','1985-11-6','03',37 union
select '04013031','趙六方','男','1987-12-28','03',55 union
select '03115002','歐陽陳其','男','1986-1-1','02',92

2,當要從一個表中取出數據插入到該新表(兩個表的表結構不一樣)時用:

     insert 新表名(列名1,列名2,....)

     select 舊錶的列名1 as 列名1,舊錶的列名2 as 列名2 from 舊錶表名

3,只是複製表結構時用:

      select * into table2(新表) from table1(原表) where 1<>1

 4,複製表結構的同時並把數據複製時用:

      select * into table2(新表) from table1(原表)

  遠程sql插入
//先打開遠程鏈接
exec sp_configure 'show advanced options',1
go
reconfigure
go
exec sp_configure 'Ad Hoc Distributed Queries',1
go
reconfigure
插入語句
SELECT * INTO 新表 FROM
opendatasource('SQLOLEDB','server=.;
uid=sa;pwd=;database=數據庫名;')
.數據庫名.舊錶
 
--創建服務器間的鏈接  參數說明: @server爲服務器寫個名稱以便在下面使用;SQLOLEDB無需改動;@datasrc是遠程數據庫所在的IP地址
EXEC sp_addlinkedserver @server='ServerName',@provider='SQLOLEDB',@srvproduct='',@datasrc='192.168.85.251'
--登錄服務器  參數說明:此處的@rmtsrvname取名要與上面的@server同樣;@rmtuser登錄服務器的用戶名;@rmtpassword登錄服務器的密碼
EXEC dbo.sp_addlinkedsrvlogin @rmtsrvname = N'ServerName',@useself = N'False',@locallogin = NULL,@rmtuser = N'sa',@rmtpassword = N'123'
/*-----------簡寫方式------------------EXEC dbo.sp_addlinkedserver 'ServerName','','SQLOLEDB','192.168.85.251'EXEC
sp_addlinkedsrvlogin  'ServerName','false',NULL,'sa','123'------------------------------------*/
Go/*------------數據操做區----------------*/select * from [ServerName].[庫名稱].[dbo].[表名稱]/*--------------End---------------------*/GO
--關閉服務器鏈接
EXEC sp_droplinkedsrvlogin 'ServerName' , NULL
EXEC sp_dropserver 'ServerName'ide

 

--刪除表字段和約束ui

declare @name varchar(50)
select @name =b.name from sysobjects b join syscolumns a on b.id = a.cdefault
where a.id = object_id('ES_honor')
and a.name ='StudentId'
exec('alter table ES_honor drop constraint ' + @name)編碼

ALTER TABLE dbo.ES_Honor
DROP COLUMN StudentIdspa

 

 

1)禁止全部表約束的SQL
select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'

2)刪除全部表數據的SQL
select 'TRUNCATE TABLE '+name from sysobjects where type='U'

3)恢復全部表約束的SQL
select 'alter table '+name+' check constraint all' from sysobjects where type='U'

4)刪除某字段的約束
declare @name varchar(100)
--DF爲約束名稱前綴
select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%'
--刪除約束
alter table 表名 drop constraint @name
--爲字段添加新默認值和約束
ALTER TABLE 表名 ADD CONSTRAINT @name  DEFAULT (0) FOR [字段名]日誌

 

--刪除約束
ALTER TABLE tablename
Drop CONSTRAINT 約束名
--修改表中已經存在的列的屬性(不包括約束,但能夠爲主鍵或遞增或惟一)
ALTER TABLE tablename 
alter column 列名 int not null
--添加列的約束
ALTER TABLE tablename
ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名
--添加範圍約束
alter table  tablename  add  check(性別 in ('M','F'))

相關文章
相關標籤/搜索