If Exists(Select * From [sysobjects] Where [xtype]='FN' And [name]='IsChinese')
Drop Function [IsChinese]
Go
Create Function IsChinese(@Str Char(2))
Returns Bit
As
Begin
Declare @Flag Bit
If DataLength(@Str) = 2
Set @Flag = 1;
Else
Set @Flag = 0;
Return(@Flag);
End
返回表类型
If Exists(Select * From [sysobjects] Where [xtype]='TF' And [name]='GetTable')
Drop Function [GetTable]
Go
Create Function GetTable(@String Varchar(1000))
Returns @Table Table
(
[ID] Int,
[String] Varchar(255)
)
As
Begin
Insert Into @Table([ID], [String]) Values(1, 'Hello');
Insert Into @Table([ID], [String]) Values(2, 'Hi');
Return
End
Go
--调用
Declare @TableName Table(ID Int, String Varchar(255));
Insert Into @TableName Select * From [dbo].GetTable('OK')
Select * From @TableName
1.执行 Dump Transaction 数据库名称 With No_Log
2.打开企业管理器(SQL2005) - 右键数据库 - 任务 - 收缩 - 数据库
如何不使用企业管理器删除日志
Dump Transaction Test With No_Log
DBCC ShrinkFile('Test_log', 1)
注意:
For example, a database with a log file of 1 GB can have the log file shrunk to only 128 MB.
如果日志很大,要收缩几次,才能收缩成最小。
整数数据类型
1.TINYINT 1个字节 0到255之间
2.SMALLINT 2个字节 -32,768到32,767之间
3.INT 4个字节-2,147,483,648到2,147,483,647之间
4.BIGINT 8个字节 -9,223,372,036,854,775,807到9,223,372,036,854,775,807之间
浮点数据类型
1.REAL 4个字节 可精确到第7位小数 -3.40E-38到3.40E+38
3.40E+38 = 3.4 * 10^38
2.FLOAT 8个字节 可精确到第15位小数
3.DECIMAL 2到17个字节
字符数据类型
1.CHAR 1 到 8000字符 采用ASCII字符集
2.NCHAR 1 到 4000字符 采用UNICODE标准字符集
3.VARCHAR 1 到 8000字符 采用ASCII字符集
4.NVARCHAR 1 到 4000字符 采用UNICODE标准字符集
逻辑数据类型
1.BIT 1个字节 值为0或1
日期和时间数据类型
1.DATETIME 4个字节 1753年1月1日到9999年12月31日
2.SMALLDATETIME 2个字节 1900年1月1日到2079年6月6日
全文目录原来处在C盘,要移动。就删除重建了,出现了一个错误。
全文目录 'Product' 处于不可使用的状态。请删除此全文目录,然后重新创建它。
删了又重建好几次,还是不行。
后来发现原因是"C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/FTData" 这个目录被我删除了。
重建了这个目录就能正常使用了。不知道为什么,已经不用这个目录了,但这个目录还必须存在。
Union
把多次查询的结果合并成一个表返回。
如
Select [ID],[Name] From [T1]
Union
Select [ID],[Name] From [T2]
[T1]和[T2]的结构可以不一样,但查询的字段类型要一样。
Union:不用 Order By 时,自动对返回结果排序。
Union All:不用 Order By 时,不对返回结果排序。
例子
如 [T1] 表记录很多,在查询时,如果使用 Order By 会严重影响查询速度
方法1
Select [ID],[Name] From [T1] Where [ClassID]=1 Order By [IsPayment] Desc
方法2
创建一个视图
Create View [V_T1_IsPayment] As Select * From [T1] Where [IsPayment]=1
Select [ID],[Name] From [V_T1_IsPayment] Where [ClassID]=1
Union All
Select [ID],[Name] From [T1] Where [ClassID]=1 And [IsPayment]=0
这样,就不用 Order By 使 IsPayment=1 的排在前面
方法1和方法2查询的结果是一样的,但方法2速度会快,省了排序的时间。
ClassID、IsPayment 都要建索引。
删除主键
Alter Table 表名 Drop Constraint 主键名
创建主键
Alter Table 表名 Add Constraint 主键名 Primary Key(主键字段)
修改字段
Alter Table 表名 Alter Column 字段 数据类型 NULL | NOT NULL Default "默认值"
Company_Name 表中有三千万条数据。
创建一个聚集索引用了20分钟。
Create Clustered Index Company_Name_Name
On [Company_Name]([Name])
创建一个非聚集索引用了7分钟。
Create NonClustered Index Company_Name_ID
On [Company_Name]([ID])
一、DBCC SHOWCONTIG
显示指定的表或视图的数据和索引的碎片信息。
语法
DBCC SHOWCONTIG
[(
{ 'table_name' | table_id| 'view_name' | view_id }
[ , 'index_name' | index_id ]
)]
参数
1. 'table_name'|table_id|'view_name'|view_id
指定要检查碎片信息的表或视图。
如果未指定,则检查当前数据库中的所有表和索引视图。
2.'index_name'|index_id
指定要检查其碎片信息的索引。
如果未指定,将处理指定表或视图的聚集索引。
例子
DBCC SHOWCONTIG('Book')
DBCC SHOWCONTIG('Book', 'Book_BookName')
二、DBCC INDEXDEFRAG
指定表或视图的索引碎片整理。
语法
DBCC INDEXDEFRAG
(
{ 'database_name' | database_id | 0 }
, { 'table_name' | table_id | 'view_name' | view_id }
[ , { 'index_name' | index_id } [ , { partition_number | 0 } ] ]
)
参数
1.'database_name' | database_id | 0
对其索引进行碎片整理的数据库。如果指定 0,则使用当前数据库。
2.'table_name' | table_id | 'view_name' | view_id
对其索引进行碎片整理的表或视图。
3.'index_name' | index_id
要进行碎片整理的索引的 ID 的名称。如果未指定,该语句就对指定表或视图的所有索引进行碎片整理。
例子
DBCC INDEXDEFRAG(0, 'Book', 'Book_BookName')