SqlServer随笔

获得表信息:

select 
	syscolumns.name as field,
	syscolumns.isnullable as nullis,
	systypes.name as sqltype,
	syscolumns.[length] as lenth,
	ISNULL(sys.identity_columns.is_identity,0) as identi,
	ISNULL(sys.extended_properties.value,'') as summary
from sysobjects 
	join syscolumns on sysobjects.id = syscolumns.id
	join systypes on syscolumns.xusertype = systypes.xusertype 
	left join sys.identity_columns 
	on sys.identity_columns.object_id = syscolumns.id and sys.identity_columns.column_id = syscolumns.colid 
	left join sys.extended_properties on sys.extended_properties.major_id = syscolumns.id
	and sys.extended_properties.minor_id = syscolumns.colid 
where sysobjects.name = 'TableName'


判断表是否存在:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TableName]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)  
	select 'true'
else
	select 'false'  
</pre><p><strong>根据表外键名称获得主键表名称</strong></p><p><pre name="code" class="sql">SELECT
外键表ID = b.fkeyid ,
外键表名称 = object_name (b.fkeyid) ,
外键列ID = b.fkey ,
外键列名 = ( SELECT name FROM syscolumns WHERE colid = b.fkey AND id = b.fkeyid) ,
主键表ID = b.rkeyid ,
主键表名= object_name (b.rkeyid) ,
主键列ID = b.rkey ,
主键列名 = ( SELECT name FROM syscolumns WHERE colid = b.rkey AND id = b.rkeyid) ,
级联更新 = ObjectProperty (a.id, ' CnstIsUpdateCascade ' ) ,
级联删除 = ObjectProperty (a.id, ' CnstIsDeleteCascade ' ) 
FROM sysobjects a 
 join sysforeignkeys b on a.id = b.constid 
 join sysobjects c on a.parent_obj = c.id 
where a.xtype = 'f' AND c.xtype = 'U' and a.name = 'News' 

select 
object_name (b.fkeyid),
外键列名 = ( SELECT name FROM syscolumns WHERE colid = b.fkey AND id = b.fkeyid)
 from sysobjects as a join  sysforeignkeys as b on a.id=b.constid
where a.xtype='F'


判断字段是否在表中已存在

if exists(select * from syscolumns where id=object_id('table') and name='cloumn') select 'true' else select 'false'

判断字段是否在表中已存在_Oracle

select 1 from all_Tab_Columns where table_name = upper('studentinfo') and column_name = upper('class');


删除指定表中的所有索引
/*
    删除指定表的所有索引,包括主键索引,唯一索引和普通索引
 
    调用:
    declare @tbName varchar(20)
    set @tbName='CP_PATHINFO'
    exec sp_dropindex @tbName

    vivianfdlpw 2005.9 引用情保留此信息
*/
if exists(select 1 from sysobjects where id=object_id('sp_dropindex') and xtype='P')
drop procedure sp_dropindex
go
create procedure sp_dropindex
@tbName varchar(20)=null   --索引名
as

if @tbName is null
begin
     raiserror('必须提供@tbName参数',12,1)
     return
end

create table #
(
   id int identity,
   index_name varchar(50),
   index_description varchar(1000),
   index_keys varchar(100)
)
insert #(index_name,index_description,index_keys) 
exec sp_helpindex @tbName

declare @i int,@sql varchar(100)
set @i=1

while @i<=(select max(id) from #)
begin
      if exists(select 1 
                from sysobjects A 
                join # B on A.name=B.index_name
                where B.id=@i and A.xtype in ('PK','UQ'))
      begin
           select @sql='alter table '+@tbName+' drop constraint '
                       +(select index_name from # where id=@i)
           exec(@sql)
      end
      else
      begin
           select @sql='drop index '+@tbName+'.'
                       +(select index_name from # where id=@i)
           exec(@sql)
      end
 
      set @i=@i+1
end

drop table #

go

create index IX_SACAG on CP_PATHINFO
(
	REMIND_TODAY
)

    declare @tbName varchar(20)
    set @tbName='CP_PATHINFO'
    exec sp_dropindex @tbName

SQL Server数据库运维是指管理和维护SQL Server数据库系统的任务和活动。这些任务包括数据库备份和恢复、性能优化、数据库健康检查、安全管理和故障排除。在进行数据库运维时,需要使用一些常见的功能语句和工具。 其中,数据库备份和恢复是数据库运维中最重要的任务之一。可以使用sqlcmd命令行工具进行备份和恢复操作。例如,可以使用以下命令行来备份数据库: sqlcmd -S .\SQLServerName -U UserName -P Password -Q "BACKUP DATABASE [DatabaseName] TO DISK='Path\BackupFile.bak'" 要进行数据库恢复,可以使用以下命令行: sqlcmd -S .\SQLServerName -U UserName -P Password -Q "RESTORE DATABASE [DatabaseName] FROM DISK='Path\BackupFile.bak' WITH REPLACE" 在进行数据库维护时,可能会遇到一些错误和问题。例如,当出现设备未就绪错误时,可以执行数据库一致性检查(DBCC CHECKDB)来检查和修复数据库的完整性。以下是一个示例代码: use master declare @databasename varchar(255) set @databasename = 'shts_db' --将数据库设置为单用户模式 ALTER DATABASE [shts_db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE dbcc checkdb(@databasename, REPAIR_ALLOW_DATA_LOSS) dbcc checkdb(@databasename, REPAIR_REBUILD) --将数据库设置为多用户模式 ALTER DATABASE [shts_db] SET MULTI_USER WITH ROLLBACK IMMEDIATE 此外,还可以使用功能语句来进行一些常见的查询和操作。例如,可以使用以下语句查询当前数据库的名称: SELECT Name FROM Master..SysDataBases WHERE DbId = (SELECT Dbid FROM Master..SysProcesses WHERE Spid = @@spid) 还可以使用以下语句生成UUID: DECLARE @uuid VARCHAR(32) SET @uuid = CAST(REPLACE(newid(), '-', '') AS VARCHAR(32)) 总之,SQL Server数据库运维涉及多个方面,包括备份和恢复、性能优化、数据库健康检查、安全管理和故障排除。在进行数据库运维时,可以使用sqlcmd工具和各种功能语句来完成各种任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [2001—SQL Server运维随笔](https://blog.youkuaiyun.com/zhang_yling/article/details/89331836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值