SQL Server 2008 R2——学习/练习/错误/总结/搜集
==================================声明==================================
本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。
未经作者同意请勿修改(包括本声明),保留法律追究的权利。
未经作者同意请勿用于出版、印刷或学术引用。
本文不定期修正完善,为保证内容正确,建议移步原文处阅读。
本文链接:http://www.cnblogs.com/wlsandwho/p/4305767.html
=======================================================================
学SQL Server 2008时遇到的,记录下来。
================================================资源链接==================
使用的是sql server 2008 r2 express with advance service
Windows7
在网上找了点资源,又买了本书:
在线视频 http://school.itzcn.com/video-vid-1932-spid-48.html
离线视频http://download.csdn.net/detail/wlsgzl/6751591
还有baidu和帮助手册。
这么准备,基本上学习一下应该是没问题的。
================================================资源勘误==================
离线视频中:
第4章 SQL Server 2008数据表管理 SQL 2008完全学习手册 视频教程 1.swf 讲的有问题,可参见http://blog.sina.com.cn/s/blog_49998558010009jy.html
2.swf和3.swf的文件命名应为3.swf和2.swf
================================================书写问题==================
sqlcmd 连接服务器失败
-S
是大写,服务器名大小写无所谓
================================================权限问题==================
附加数据库失败
错误:5120
解决办法:
1.打开该文件的属性窗口,选择“属性”->“安全”->“编辑”。
2.在“组或用户名”中,选择“Authenticated Users”,在“权限”中选择“完全控制”。
3.选择"确定"按钮,关闭对话框。
附加数据库成功。
================================================设置问题==================
更改已有的表,提示“不允许保存更改”
解决办法:
在工具-选项中
================================================设置问题==================
使用 sp_rename 更改表名称,提示:“注意:更改对象名的任意部分都可能会破坏脚本和存储过程”
解决办法:暂无
===============================================================!!!!!!!!====
第5章 2.swf 修改删除视图
过早的引入了复杂的join和on
================================================资源勘误==================
第5章 10.swf 聚集索引和非聚集索引
按照讲解顺序,应该叫 4.5.swf。
================================================1234==================
insert...select...
0 创建:
USE [人事管理系统]
GO CREATE TABLE [dbo].[新员工信息2](
[员工编号] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[员工姓名] [nvarchar](10) NULL,
[所在部门编号] [int] NULL,
[所任职位] [nvarchar](20) NULL,
[性别] [nvarchar](5) NULL,
[籍贯] [nvarchar](30) NULL,
[婚姻状况] [nvarchar](5) NULL,
[政治面貌] [nvarchar](10) NULL,
[文化程度] [nvarchar](10) NULL,
[专业] [nvarchar](30) NULL,
[联系电话] [int] NULL,
[入职时间] [datetime] NULL,
[离职时间] [datetime] NULL,
[在职状态] [nvarchar](10) NULL,
[照片] [image] NULL,
[年龄] [int] NULL,
[邮编] [dbo].[postcode] NULL,
[分数] [int] NULL
)
GO
1 分析、执行:
INSERT INTO dbo.新员工信息2
SELECT *
FROM dbo.新员工信息
提示:
消息 8101,级别 16,状态 1,第 1 行
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'dbo.新员工信息2'中的标识列指定显式值。
2 分析、执行:
SET IDENTITY_INSERT dbo.新员工信息2 ON
INSERT INTO dbo.新员工信息2
SELECT *
FROM dbo.新员工信息 SET IDENTITY_INSERT dbo.新员工信息2 OFF
提示:
消息 8101,级别 16,状态 1,第 2 行
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'dbo.新员工信息2'中的标识列指定显式值。
3 分析、执行:
SET IDENTITY_INSERT dbo.新员工信息2 ON
INSERT INTO dbo.新员工信息2
( 员工姓名 ,
所在部门编号 ,
所任职位 ,
性别 ,
籍贯 ,
婚姻状况 ,
政治面貌 ,
文化程度 ,
专业 ,
联系电话 ,
入职时间 ,
离职时间 ,
在职状态 ,
照片 ,
年龄 ,
邮编 ,
分数
)
SELECT 员工姓名 ,
所在部门编号 ,
所任职位 ,
性别 ,
籍贯 ,
婚姻状况 ,
政治面貌 ,
文化程度 ,
专业 ,
联系电话 ,
入职时间 ,
离职时间 ,
在职状态 ,
照片 ,
年龄 ,
邮编 ,
分数
FROM dbo.新员工信息
SET IDENTITY_INSERT dbo.新员工信息2 OFF
提示:
消息 545,级别 16,状态 1,第 2 行
当 IDENTITY_INSERT 设置为 ON 或某个复制用户向 NOT FOR REPLICATION 标识列中插入内容时,必须为表 '新员工信息2' 中的标识列指定显式值。
4 (我了个草,不知道在界面改了原始表的ID的什么东西,难道是复制选项?只运行第二条居然能运行了。这让我还怎么接着往下写啊!!!!)
================================================资源勘误==================
第6章 12.swf DELETE语句
视频不完整
================================================个人总结==================
第7章
表A(字段1,字段2) | 表B(字段a,字段b) | |
内/等值 | = | |
左 | 主 | |
右 | 主 | |
交叉 | 1a 1b 2a 2b | |
自 | A、B是一个表 | |
================================================XML相关===================
额外的参考资料,下面的评论也是极好的。
http://www.2cto.com/database/201308/235061.html
http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.html
================================================存储过程===================
错误的语法:“CREATE PROC”必须是批处理中仅有的语句
解决方法:http://zhidao.baidu.com/question/450116542.html
之间添加GO
如图:
================================================错误916===================
问题:
解决方法:在视图中选择对象资源管理器详细信息(F7),在列标题上点击右键,取消排序规则的选中。
取消排序规则
刷新
================================================消息208===================
CREATE PARTITION FUNCTION PartFunc_SlaveData(DATETIME)
AS RANGE RIGHT
FOR VALUES( '20150101',
'20160101',
'20170101',
'20180101',
'20190101',
'20200101',
'20210101',
'20220101',
'20230101',
'20240101',
'20250101')
GO CREATE PARTITION SCHEME PartSch_SlaveData
AS PARTITION PartFunc_SlaveData
TO ( EnzymeDotPerior,
EnzymeDot2015,
EnzymeDot2016,
EnzymeDot2017,
EnzymeDot2018,
EnzymeDot2019,
EnzymeDot2020,
EnzymeDot2021,
EnzymeDot2022,
EnzymeDot2023,
EnzymeDot2024,
EnzymeDot2025)
显示消息
消息 208,级别 16,状态 58,第 1 行
对象名 'EnzymeDot2015' 无效。
解决方法:
ALTER DATABASE EnzymeDot ADD FILEGROUP ENZYMEDOTPERIOR
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2015
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2016
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2017
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2018
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2019
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2020
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2021
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2022
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2023
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2024
ALTER DATABASE EnzymeDot ADD FILEGROUP EnzymeDot2025
疑问:难道添加文件组只能用命令的方式吗?
参考资料:作者faith_shaw http://zhidao.baidu.com/link?url=eKS1a4ahKN4YbI1_ZtGWjfnloG2HR-iisss1XHWLdDJ2x0ojhqrwWDeX1vdLHoZxDlMbmAa5uj-L6JpigX2LtK
================================================随机数据===================
指定字典集中的随机字符串
CREATE PROCEDURE dbo.GetRandStr
(
@Count INT ,
@no VARCHAR(8) OUTPUT
)
AS
BEGIN
DECLARE @RANDOMSTR VARCHAR(100) ,
@CHARPOOL VARCHAR(36) ,
@ss VARCHAR
DECLARE @I INTEGER ,
@counter INTEGER
SET @CHARPOOL = '0123456789abcdefghijklmnopqrstuvwxyz'
SET @I = 1
SET @RANDOMSTR = ''
WHILE @I <= @Count
BEGIN
HERE:
SET @counter = CAST(RAND() * 100 / 2.75 AS INTEGER)
IF @counter < 1
GOTO HERE
SET @RANDOMSTR = @RANDOMSTR + SUBSTRING(@CHARPOOL, @counter, 1)
SET @I = @I + 1
END
SET @no = LEFT(@RANDOMSTR, ISNULL(@Count, 8))
RETURN
END
GO
使用方法
DECLARE @something VARCHAR(12)
EXEC GetRandStr 6, @something OUTPUT
PRINT @something
EXEC GetRandStr 6, @something OUTPUT
PRINT @something
GO
作者/链接http://bbs.csdn.net/topics/370210814
================================================随机数据===================
指定范围内的随机时间
方法1
declare @t1 datetime,@t2 datetime,@dd int
set @t1='2010-01-01 00:00:00'
set @t2='2025-12-31 00:00:00'
set @dd=datediff(dd,@t1,@t2)*rand()
select dateadd(dd,@dd,@t1) +RAND()
方法2
SELECT
TOP 10
CAST(CHECKSUM(newID())%40357 AS DATETIME)+RAND() AS 隨機值
FROM syscolumns b
作者/链接 http://bbs.csdn.net/topics/340033413
http://bbs.csdn.net/topics/340165720
================================================分区表===================
作者smallfools链接http://blog.csdn.net/smallfools/article/details/4930810
写的很通俗易懂。而且是一个系列,很赞啊。
大致的看了下,我也试了一下。
贴出脚本。仅供学习交流,勿用于商业行为。
1创建数据库,同时创建文件和文件组。
CREATE DATABASE [SomeTest] ON PRIMARY
( NAME = N'SomeTest', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\SomeTest.mdf' , SIZE = 30720KB , FILEGROWTH = 10%),
FILEGROUP [ed15andPrior]
( NAME = N'ed15andPrior', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\ed15andPrior.ndf' , SIZE = 30720KB , FILEGROWTH = 10%),
FILEGROUP [ed16]
( NAME = N'ed16', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\ed16.ndf' , SIZE = 30720KB , FILEGROWTH = 10%),
FILEGROUP [ed17]
( NAME = N'ed17', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\ed17.ndf' , SIZE = 30720KB , FILEGROWTH = 10%),
FILEGROUP [ed18]
( NAME = N'ed18', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\ed18.ndf' , SIZE = 30720KB , FILEGROWTH = 10%),
FILEGROUP [ed19]
( NAME = N'ed19', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\ed19.ndf' , SIZE = 30720KB , FILEGROWTH = 10%),
FILEGROUP [ed20andLater]
( NAME = N'ed20andLater', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\ed20andLater.ndf' , SIZE = 30720KB , FILEGROWTH = 10%)
LOG ON
( NAME = N'SomeTest_log', FILENAME = N'D:\HTSoftware\SomeTest\Database\sqlserver\DATA\SomeTest_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [SomeTest] SET COMPATIBILITY_LEVEL = 100
GO
ALTER DATABASE [SomeTest] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [SomeTest] SET ANSI_NULLS OFF
GO
ALTER DATABASE [SomeTest] SET ANSI_PADDING OFF
GO
ALTER DATABASE [SomeTest] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [SomeTest] SET ARITHABORT OFF
GO
ALTER DATABASE [SomeTest] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [SomeTest] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [SomeTest] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [SomeTest] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [SomeTest] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [SomeTest] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [SomeTest] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [SomeTest] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [SomeTest] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [SomeTest] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [SomeTest] SET DISABLE_BROKER
GO
ALTER DATABASE [SomeTest] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [SomeTest] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [SomeTest] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [SomeTest] SET READ_WRITE
GO
ALTER DATABASE [SomeTest] SET RECOVERY FULL
GO
ALTER DATABASE [SomeTest] SET MULTI_USER
GO
ALTER DATABASE [SomeTest] SET PAGE_VERIFY CHECKSUM
GO
USE [SomeTest]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [SomeTest] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
2创建分区函数和分区方案(scheme)
USE SomeTest
GO CREATE PARTITION FUNCTION PartFunc_SlaveData(DATETIME)
AS RANGE RIGHT
FOR VALUES( '20160101',
'20170101',
'20180101',
'20190101',
'20200101')
GO CREATE PARTITION SCHEME PartSch_SlaveData
AS PARTITION PartFunc_SlaveData
TO (ed15andPrior,
ed16,
ed17,
ed18,
ed19,
ed20andLater)
3创建使用分区方案的表,然后再添加非聚集的(联合)主键。
(感觉分开好点。我不是专业数据库人员,不明白为什么,这是我UI操作后到处的脚本修改的。但是可以用。)
USE [SomeTest]
GO SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[SlaveData]
(
[Cmd] [nchar](4) NOT NULL ,
[Num] [int] NOT NULL ,
[Name] [nchar](10) NOT NULL ,
[InnerID] [nchar](6) NOT NULL ,
[Result] [tinyint] NOT NULL ,
[ChkTime] [datetime] NOT NULL ,
[Legal] [tinyint] NULL
)
ON PartSch_SlaveData(ChkTime)
GO ALTER TABLE dbo.SlaveData
ADD CONSTRAINT PK_SlaveData PRIMARY KEY NONCLUSTERED
(
[InnerID] ASC,
[ChkTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
下面来测试下。(所用的函数/过程/方法来自互联网,略有修改,在上文中已给链接。)
USE [SomeTest]
GO SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[SlaveData]
(
[Cmd] [nchar](4) NOT NULL ,
[Num] [int] NOT NULL ,
[Name] [nchar](10) NOT NULL ,
[InnerID] [nchar](6) NOT NULL ,
[Result] [tinyint] NOT NULL ,
[ChkTime] [datetime] NOT NULL ,
[Legal] [tinyint] NULL
)
ON PartSch_SlaveData(ChkTime)
GO ALTER TABLE dbo.SlaveData
ADD CONSTRAINT PK_SlaveData PRIMARY KEY NONCLUSTERED
(
[InnerID] ASC,
[ChkTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE SomeTest DECLARE @i INT
SET @i = 1
DECLARE @someid NVARCHAR(12) DECLARE @t1 DATETIME ,
@t2 DATETIME ,
@dd0 INT ,
@dayadd INT ,
@tRes DATETIME
SET @t1 = '2010-01-01 00:00:00'
SET @t2 = '2025-12-31 00:00:00'
SET @dd0 = DATEDIFF(dd, @t1, @t2) WHILE @i < 100 --数据规模
BEGIN
SET @dayadd = @dd0 * RAND()
SET @tRes = DATEADD(dd, @dayadd, @t1) + RAND() EXEC GetRandStr 6, @someid OUTPUT --SELECT @tRes AS '日期时间',@someid AS '随即字符串'
--PRINT @tRes
--PRINT @someid INSERT INTO dbo.SlaveData
( Cmd ,
Num ,
Name ,
InnerID ,
Result ,
ChkTime ,
Legal
)
VALUES ( N'test' , -- Cmd - nchar(4)
1 , -- Num - int
N'aabbccddee' , -- Name - nchar(10)
@someid , -- InnerID - nchar(6)
1 , -- Result - tinyint
@tRes , -- ChkTime - datetime
1 -- Legal - tinyint
) SET @i = @i + 1
END
查看
SELECT * FROM dbo.SlaveData WHERE $PARTITION.PartFunc_SlaveData(ChkTime)=1
SELECT * FROM dbo.SlaveData WHERE $PARTITION.PartFunc_SlaveData(ChkTime)=2
SELECT * FROM dbo.SlaveData WHERE $PARTITION.PartFunc_SlaveData(ChkTime)=3
SELECT * FROM dbo.SlaveData WHERE $PARTITION.PartFunc_SlaveData(ChkTime)=4
SELECT * FROM dbo.SlaveData WHERE $PARTITION.PartFunc_SlaveData(ChkTime)=5
SELECT * FROM dbo.SlaveData WHERE $PARTITION.PartFunc_SlaveData(ChkTime)=6
================================================????===================
SQL Server 2008 R2——学习/练习/错误/总结/搜集的更多相关文章
- SQL Server 2008 R2 使用 PIVOT 错误
SQL Server 2008 R2 使用 PIVOT 错误! 'PIVOT' 附近有语法错误.您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能. 有关 ALTER DATABASE 的 ...
- sql server 2008 R2连接失败 错误:18456
这种问题的解决方法: 第一步:以windows验证模式进入数据库管理器. 第二步:在对新资源管理器中右击实例名称选择属性,弹出服务器属性对话框,我们在左侧栏选择[安全性]选项卡,选中”SQL Serv ...
- SQL Server 2008 R2 安装出错:Could not open key
安装Sql Server 2008 R2 企业版出现错误提示无法继续安装,错误提示为: Could not open key: UNKNOWN\Components\7ABFE44842C12B390 ...
- 更改计算机名称后 导致 sql server 2008 R2 用windows账户不能附加的错误解决办法
出错背景:本人想用sql server 2008 R2 附加sql server 2005数据库出现拒绝访问,后查询网站得知,要用windows身份验证方式登录进去附加, 然后我就用windows身份 ...
- 安装SQL Server 2008 R2 Enterprise错误:'' is not a valid login or you do not have permission
今天安装SQL Server时遇到一个恶心的Bug. ------------------------------------------------------------------------- ...
- sql server 2008 R2无法连接127.0.0.1报错 Server error:40(错误:53)
在公司用sql server 2008 R2很好的,回家连接127.0.0.1就报错.sql server2008R2主机名和.都可以登录,连接127.0.0.1出错,在与 SQL Server 建立 ...
- Microsoft SQL Server 2008 R2 安装卸载
问题 问题1 标题: Microsoft SQL Server 2008 R2 安装程序 ------------------------------ 出现以下错误: Could not open k ...
- SQL Server 2000向SQL Server 2008 R2推送数据
[文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...
- SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了
一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder, ...
随机推荐
- BZOJ 1054 广搜
1054: [HAOI2008]移动玩具 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩 ...
- Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
导读 行文本输入框在用于界面的文本输入,在WEB登录表单中应用广泛.一般行文本编辑框可定制性较高,既可以当作密码输入框,又可以作为文本过滤器.QLineEdit本身使用方法也很简单,无需过多的设置就能 ...
- Qt Style Sheet实践(一):按钮及关联菜单
导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...
- JS 生成26个大小写字母
主要用到 str.charCodeAt()和 String.fromCharCode()方法 -->使用 charCodeAt() 来获得字符串中某个具体字符的 Unicode 编码. --&g ...
- 百度地图刷新显示不完整?(应该是和div顺序有关系)
解决方案:1异步加载(jquery(function(){loadJScript():})) 2解析加载设置了个延迟(setTimeOut(getInit,1000))
- 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性
[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...
- 内存分段 && 缓冲区 && 析构函数
一.内存中的程序: 在进程被载入内存中时,基本上被分成许多小的节,以下是6个主要的节. 低地址 高地 ...
- springMVC图片文件上传功能的实现
在工程依赖库下添加文件上传jar包 commons-fileupload-1.2.2.jar commons-io-2.4.jar 2.jsp页面设置form表单属性enctype 在表单中上传图片时 ...
- PHP学习笔记:keditor的使用
keditor时一个免费的开源编辑器,很多公司在使用(百度编辑器也不错).最近为了做一个客户信息管理系统,在发送邮件模块用到这个编辑器,也算学习一下新的东西. 第一步:下载编辑器 到它的官网下载:ht ...
- 【Effective Java】2、构造参数过多的时候
package cn.xf.cp.ch02.item2; /** * * 功能:当我们的构造参数有很多,超出可控范围的时候,用build模式 时间:下午8:25:05 文件:NutritionFact ...