欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sqlserver基本操作语法

程序员文章站 2024-02-22 23:05:17
...
sqlserver基本操作语法

写在前面
sqlserver的基本语法,和Orcal、mysql还是有些区别的。具体的区别会在另一个篇幅去解读。这里我主要结合实时工作应用总结一下sqlserver数据库的基本操作。

1.数据表备份

select * into A_tmp from A ; --A表数据库的表、A_tmp 是备份表

2.表结构修改
  • 修改字段类型
    alter table A alter COLUMN A.clmn varchar(80);
  • 修改表名:
    EXEC sp_rename ‘原有表名’, ‘新表名’;
  • 修改列名:
    EXEC sp_rename ‘表名.[原有列名]’, ‘新列名’ , ‘COLUMN’;
  • 修改主键
    思路是先删除主键、修改新的主键列为非空,添加主键
    alter table A drop constraint PK_A ; --PK_TableName原主键名称,删除原来的主键
    alter table A alter column A.clmn varchar(60) not null ;–修改数据类型
    alter table A add constraint PK_A
    primary key clustered(clmn1,clmn2,clmn); --重新创建主键
  • 添加表字段注释
    execute sp_addextendedproperty ‘MS_Description’,‘列1’,‘user’,‘dbo’,‘table’,‘LES_EP_FX’,‘column’,‘CURR1’;
3.锁表与解锁
  • 查看锁表
       select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
       from   sys.dm_tran_locks where resource_type='OBJECT';
- 解锁
      declare @spid int 
      Set @spid = 66 --锁表进程
      declare @sql varchar(1000)
      set @sql='kill '+cast(@spid as varchar)
      exec(@sql)
4.查看所有表及字段注释
SELECT
     表名       = Case When A.colorder=1 Then D.name Else '' End,
     表说明     = Case When A.colorder=1 Then isnull(convert(varchar(100),F.value),'') Else '' End,
     --字段序号   = A.colorder,
     字段名     = A.name,
     字段说明   = isnull(convert(varchar(100),G.[value]),'')
     --标识       = Case When COLUMNPROPERTY( A.id,A.name,'IsIdentity')=1 Then '√'Else '' End,
   --  主键       = 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,
   --  占用字节数 = A.Length,
    -- 长度       = COLUMNPROPERTY(A.id,A.name,'PRECISION'),
    -- 小数位数   = isnull(COLUMNPROPERTY(A.id,A.name,'Scale'),0),
    -- 允许空     = Case When A.isnullable=1 Then '√'Else '' End,
    -- 默认值     = isnull(E.Text,'')
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='table_name'    --如果只查询指定表,加上此条件
Order By
	A.id,
	A.colorder ;
5.字段类别对比
sql server中的varchar和Nvarchar有什么区别?

**varchar(n):**长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。
**nvarchar(n):**包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。
–例:两字段分别有字段值:我和coffee
–那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。
结论:如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

datetime 和date的区别

**date类型:**是SQL Server 2008开始新引进的一种数据类型,他只包含日期 不包含小数部分 可以表示的日期范围为 0001 年 1 月 1 日 -到 9999 年 12 月 31 日 需要3个字节的存储空间
**datetime:**包含日期和时间部分,可以表示的范围为1753年1月1日 00:00:00到9999年12月31日 23:59:59:997 精度为 3.33 毫秒 占8个字节
–默认时间 1900-01-01 00:00:00
结论:存储年月日格式,用date类型,存储年年月日时分秒类型用datetime

6.查看数据库所有表占用空间
   select
A.REC_RCODE,
A.PAY_RCODE,
  case
    when A.REC_RCODE = 'FIXED'
    and A.PAY_RCODE = '' then '02'
    when A.REC_RCODE = ''
    and A.PAY_RCODE = 'FIXED' then '01'
    else null end AS BUYERSellr 
from
  les_data.dbo.LES_DERIVATIVE_MTM A
where
  A.GL_PRODUCT_CODE in ( '320','590');
select object_name(id) tablename,8*reserved/1024 reserved,rtrim(8*dpages/1024)+'Mb' used,8*(reserved-dpages)/1024 unused,8*dpages/1024-rows/1024*minlen/1024 free,
rows from sysindexes
where indid=1
order by reserved desc 

#####7.一些常用的函数

  • 去除字符空格 LTrim(RTrim( ))
  • 生成8为随机数 RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8)
  • 将字符串格式的 2019-06-30 转为 20190630 convert(char(8),A.dt_date,112) AS dt_date

上一篇: sqlserver语法

下一篇: