错误信息如下:
在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
出现这种情况一般是安装了 Express 版数据库
我安装的就是 SQL Server2005 Express,这个版本在安装没有让用户选择是用那种模式进行身份验证,默认是用 Windows 身份验证模式,sa 用户也是被禁用的,所以会出现上面的错误,不允许进行远程连接。
解决方法
一、启用数据库远程连接
1、打开 SQL Server Management Studio Express
2、打开服务器属性窗口,选中服务器,点击右键,在菜单中点击属性,就会弹出窗口
3、选择“安全性”选项卡,服务器身份验证使用“SQL Server 和 Windows 身份验证模式”,再按确定保存设置。
二、启用 sa 帐户
1、打开 SQL Server Management Studio Express
2、点击数据库服务,就会展开一个下拉列表,再点击“安全性”,又会展开一个下拉列表,再点击“登录名”,就会看见 sa 帐户,右键查看其属性,就会弹出属性窗口。
3、选择“状态”选项卡,登录设置为“启用”,按确定保存设置。
用ASP连不Sql Server 数据库,用了各种连接字符串,都不行。
用ASP.NET就可以连上数据库,我想数据库本身是没有问题吧。
后有乱试,用IP和端口,居然成功了,本来不指定端口会用默认端口1433的,可它就是不行。
Driver={SQL Server};Server=192.168.1.100,1433;UID=sa;PWD=sa;Database=abc
Declare @count Int;
Select @count=count(*) From [Member]
Print Convert(varchar, @count);
等同于
Declare @count Int;
Declare @sql Nvarchar(1000);
Set @sql = 'Select @count=count(*) From [Member]'
Exec Sp_Executesql @sql,N'@count int output',@count output -- 注意字符串前要加 N
Print Convert(varchar, @count);
SQL语句中类似Sleep的语句
使用 WaitFor Delay
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 都要建索引。