雜記 數據庫相關

 根據一張表刪除另一張表的數據 :
Delete from E22009062501B
From E22009062502B A INNER JOIN E22009062501B B
ON A.ID= B.ID
Where A.Name=B.Name  
 
sql2005附件數據庫失敗,提示:SQL2005附加數據庫"失敗........無法更新數據庫"xxx",因爲數據庫是隻讀。
解決方法(引自網絡):
提示:無法更新數據庫"xxx",因爲數據庫是隻讀的.(Microsoft SQL Server,錯誤:3906),檢查數據庫文件非只讀的,
後來把mdf的文件拷貝到C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data目錄下添加就成功。
可我不習慣把數據庫文件放到系統所在分區。鬱悶中發現C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data目錄安全選項中多了一SQLServer2005MsSQLUser$XXX$MSSQLSERVER的用戶,他完全控制該目錄。明白了。給目錄D:\DBFile\加上對應的用戶與操作權限。就oK了。
就是添加SQL用戶對該文件的操作權限。
 

查詢數據庫字段及其類型

select
a.Name as TableName,
b.Name as ColumnName,
c.Name as TypeName,
b.max_length as Bits,
b.Precision as Ints,
b.Scale as Floats
---into BBB
from Sys.tables a
inner join Sys.columns b on a.object_id=b.object_id
inner join sys.Types c on c.User_Type_ID=b.User_Type_ID
where c.name='nvarchar' and b.max_length=-1

 
SQL2005 Manage Studio 還原
alter database 你的數據庫名 set offline with rollback immediate
 

安裝SQL2000,創建掛起的文件  解決方法:

打開註冊表編輯器(或在命令行輸入:regedit),在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations項目,並刪除它。

 

查詢數據庫中數據表的名稱
select name from DataBase.dbo.sysobjects where xtype='u'

 

sql 默認值
alter table tb
add constraint df_a default 默認值 for username

-----設置默認值
ALTER TABLE [T_ReturnDetails] ADD DEFAULT '0' FOR [ReceiveStatus] WITH VALUES--//添加默認值

 

sql 刪除約束

-----刪除列約束
Alter table T_ReturnDetails --table_name表名
Drop constraint DF_T_ReturnDetails_IsReceive  --constraint_name約束名

 

初級sql之根據一張表數據更新另一張表數據
update Substaion
set Substaion.LocalName=b.ConnectionMode
from Substaion a,EquipmentConnectionMode b
where a.Id=B.MRID
 
根據字段名查詢表
select a.name tableName,b.name columnName from sysobjects a,syscolumns b where a.id=b.id and b.name='columnName' and a.type='U'

 

是否數字
select isnumeric(RegUnitName) from Table where Column=17800

 

查詢純字母的行
select * from RegUnits where patindex('%[^A-z]%',RegUnitName)=0

 

創建唯一性約束:
CREATE   UNIQUE      INDEX   Province_ToDay   ON   BrowseCount   (ProvinceNo, ToDay)  --CLUSTERED

 

查詢區分大小寫
select * from Users where  UserName collate Chinese_PRC_CS_AS= 'YuTian'

 

日期轉換

select CONVERT(varchar(10),getdate(),120)


更改列名

EXEC   sp_rename   'T_Partner.PrinterDetect',   'IsPrinterDetect',   'COLUMN'


判斷表是否存在

if not exists(select name from sysobjects where name=''+@name+'' and type='u'
begin
-- 創建
end
if object_id('[Table1]'is null 
create table [Table1] ([col1] int,[col2] int)


給表添加說明

 EXECUTE sp_addextendedproperty N'MS_Description', '抓取信息的貼吧', N'user', N'dbo', N'table', N'BaiDu_TieBa', NULL, NULL

給列添加說明

exec sp_addextendedproperty N'MS_Description', N'貼吧名稱', N'user', N'dbo', N'table', N'BaiDu_TieBa', N'column', N'TieBaName'

EXEC sys.sp_addextendedproperty @name=N'MS_Description',  @value=N'其他接收人姓名' , @level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'TABLE',@level1name=N'T_DoaMaterial',
@level2type=N'COLUMN',@level2name=N'TransToName'

 

修改說明

execute sp_updateextendedproperty N'MS_Description',N'這是修改後的測試列1',N'SCHEMA',N'dbo',N'table',N'test',N'column',N'col1'

 

 

刪除說明

 -EXEC sp_dropextendedproperty 'MS_Description','user',dbo,'table','TagsCommon',null,null
--EXEC sp_dropextendedproperty 'MS_Description','user',dbo,'table','ZipAreaCode',null,null

 

Sql Server中判斷表或者數據庫是否存在
1.數據庫
if exists(select 1 from master..sysdatabases where name='example')
print 'DataBase existed'
else
print 'Database not existed'

2.表

IF Exists(Select 1 From sysObjects Where Name ='表名' And Type In ('S','U'))
Print 'Exists Table'
Else
Print 'Not Exists Table'


在Sql Server2005中可以簡化上述語句

如:

use example
go
if object_id('a','U') is not null
drop table a
go

注:a 是一個表,U代表是數據表類型

類似於U的類型代碼,如下所示

對象類型:

AF = 聚合函數 (CLR)
C = CHECK 約束
D = DEFAULT(約束或獨立)
F = FOREIGN KEY 約束
PK = PRIMARY KEY 約束
P = SQL 存儲過程
PC = 程序集 (CLR) 存儲過程
FN = SQL 標量函數
FS = 程序集 (CLR) 標量函數
FT = 程序集 (CLR) 表值函數
R = 規則(舊式,獨立)
RF = 複製篩選過程
SN = 同義詞
SQ = 服務隊列
TA = 程序集 (CLR) DML 觸發器
TR = SQL DML 觸發器
IF = SQL 內聯表值函數
TF = SQL 表值函數
U = 表(用戶定義類型)
UQ = UNIQUE 約束
V = 視圖
X = 擴展存儲過程
IT = 內部表

 

還原數據庫
RESTORE DATABASE [LexmarkMpsDoa]   
FROM    DISK = N'F:\Project\LexmarkMpsDoa\DataBase\LexmarkMpsDoa_backup_201202180100.bak'   
WITH REPLACE


--刪除默認值約束
DECLARE @tablename VARCHAR(100), @columnname VARCHAR(100), @tab VARCHAR(100)
SET @tablename='CssConsultation'---表名
SET @columnname='SolutionClass'---列名

declare @defname varchar(100)
declare @cmd varchar(100)

select @defname = name
FROM sysobjects so
JOIN sysconstraints sc
ON so.id = sc.constid
WHERE object_name(so.parent_obj) = @tablename
AND so.xtype = 'D'
AND sc.colid =
(SELECT colid FROM syscolumns
WHERE id = object_id(@tablename) AND
name = @columnname)

SELECT @defname

select @cmd='alter table '+ @tablename+ ' drop constraint '+ @defname
if @cmd is null
 print 'No default constraint to drop'
ELSE
 exec (@cmd)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章