sql server中的自增问题

sql server 2005 如何设置int型数据自增,又如何插入一条记录?

SQL Server 通过IDENTITY 来设置

参数有2个,一个是“初始值”一个是“增量”。

 

1> CREATE TABLE test_create_tab2 (

2>   id   INT  IDENTITY(1, 1)  PRIMARY KEY,

3>   val  VARCHAR(10)

4> );

5> go

 

1> INSERT INTO test_create_tab2(val) VALUES (‘NO id’);

2> go

 

默认情况下INSERT语句中,不能对IDENTITY 的字段进行赋值。

 

1> INSERT INTO test_create_tab2(id, val) VALUES (6, ‘id no use’);

2> go

消息544,级别16,状态1,服务器HOME-BED592453CSQLEXPRESS,第1行

当IDENTITY_INSERT设置为OFF时,不能为表’test_create_tab2’中的标识列插入显式值。

 

 

1> INSERT INTO test_create_tab2(val) VALUES (‘A’);

2> INSERT INTO test_create_tab2(val) VALUES (‘B’);

3> INSERT INTO test_create_tab2(val) VALUES (‘C’);

4> INSERT INTO test_create_tab2(val) VALUES (‘D’);

5> go

 

1> SELECT * FROM test_create_tab2;

2> go

id          val

———– ———-

1 NO id

2 A

3 B

4 C

5 D

 

(5行受影响)

 

 

当IDENTITY列中间的数据被删除,造成数据不连续的时候。

可以通过SET IDENTITY_INSERT 表名ON/OFF语句来允许/禁止对IDENTITY列进行显式的插入动作。

 

–删除一个数据,造成数据不连续.

1> DELETE FROM test_create_tab2 WHERE id = 3;

2> go

 

(1行受影响)

 

–允许将显式值插入表的标识列中

1> SET IDENTITY_INSERT test_create_tab2 ON

2> go

1> INSERT INTO test_create_tab2(id, val) VALUES (3, ‘id is use’);

2> go

 

(1行受影响)

 

–不允许将显式值插入表的标识列中

1>  SET IDENTITY_INSERT test_create_tab2 OFF

2> go

1> SELECT * FROM test_create_tab2;

2> go

id          val

———– ———-

1 NO id

2 A

3 id is use

4 C

5 D

 

(5 行受影响)

 

 

IDENTITY的重置

方案一:通过truncate table 处理

[此命令将删除表中所有的数据,使用前你需要确认你是否要做这个操作. 如果不希望修改表数据的,请采用方案二]

1> truncate table  test_create_tab2;

2> go

1> INSERT INTO test_create_tab2(val) VALUES (‘NO id’);

2> go

 

(1行受影响)

1> select * from test_create_tab2;

2> go

id          val

———– ———-

1 NO id

 

(1行受影响)

 

方案二:使用DBCC

1> select * from test_create_tab2;

2> go

id          val

———– ———-

2 NO id

 

(1行受影响)

1> delete from test_create_tab2;

2> go

 

(1行受影响)

 

查看当前ID。

1> DBCC CHECKIDENT(‘test_create_tab2’, NORESEED)

2> go

检查标识信息:当前标识值’2’,当前列值’2’。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

 

重置ID

1> DBCC CHECKIDENT(‘test_create_tab2’, RESEED, 100)

2> go

检查标识信息:当前标识值’2’,当前列值’100’。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

1> INSERT INTO test_create_tab2(val) VALUES (‘NO id’);

2> go

 

(1行受影响)

1> select * from test_create_tab2;

2> go

id          val

———– ———-

101 NO id

 

(1行受影响)

 

 

 

 

IDENTITY只能在如下情况下建立:

在创建表时创建新的IDENTITY列

在现有表中创建新的IDENTITY列

不能 把已经存在的列,修改为IDENTITY列

—————————————–华丽分割线————————————————————-

今天sql server的存储过程帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧。

在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的!看下这个Demo:
1.建立这样的简单的表Test.

2.设置字段id的自增.

3.表添加数据
insert into Test(name) values(‘TestName’)
insert into Test(name) values(‘TestName’)
insert into Test(name) values(‘TestName’)
4.你会看到

5.在这里我们删除id为2的行.就只剩下了id为1和id为3的两行数据了.(不上图了)
6.再添加一条数据.
insert into Test(name) values(‘TestName’)
我们会发现这或许不是我们想要的结果了

为什么没有id为2的呢?之后任你死命的加,也不会有id为2的数据行了!
这样的设计固然方便,但是魔鬼在于细节,这篇博客就是为了解决这个问题让我们重新见到id为2的数据行(这里顺便改进一下,让结果不只是显示id为2这样的int,假如有一天我们的各户要求我们他们要一个5位数的id号吗,从00000开始,OK,这没问题)
1.主角登场,存储过程终于派上了用场了

Create procedure [dbo].[insertName](@name nvarchar(50)) 
as
begin
     declare @i int
     set @i=1 
     while(@i<10000) 
     begin
       if exists(select convert(int,id) from numbertest where convert(int,id)=@i) 
       begin
       set @i=@i+1 
       continue
       end
       else
       begin
       insert numbertest values(right('0000'+convert(varchar(5),@i),5),@name)
       --这里的两个数字'5' 就是我们要设置的id长度
        break
     end
   end
end

2.用SQL 语句调用这个存储过程
execute insertName Test
你可以狂按几次,几十次,几百次,我们要的数据加进去了,

我们可以删除指定的id数据行,当我们再次进行添加的时候,之前被删掉的id行,将会被我们新添加的数据所覆盖,这样id就都可以连接起来了.
哦,对了,还没有说如何显示的是 ‘0’ 开头的呢?这个简单,将id的数据类型设置为nvarchar(5),就是这么简单!呵呵!
总结:
这里我们调用了存储过程,存储过程不宜多用,但是有的时候还真是用起来很方便,本文章对于刚刚工作的童鞋们应该还是有点帮助的吧,好好学习吧,生活很美好!
如释重负的感觉啊,终于搞定一个问题。
其实还有一个方法也可以解决:就是先将ID字段删除,再重新建一个。

虽然作者为我们解决了一个大麻烦,在此对作者表示感谢。
但是还是对作者有点看法:数据库是用来存储数据的地方,至于ID字段是否要按顺序的自动增量字段,没有人在乎这个,也没有人去看这个,只要前台能够完成想要的功能就行了,没有必要花这么多时间去解决这个方法,大家觉得有这个必要吗?

 

来源 aspbc.com

PowerDesigner中的数据类型对照表

The following numeric data types are available:

Standard data type

DBMS-specific physical data type
Content
Length

Integer int / INTEGER 32-bit integer
Short Integer smallint / SMALLINT 16-bit integer
Long Integer int / INTEGER 32-bit integer
Byte tinyint / SMALLINT 256 values
Number numeric / NUMBER Numbers with a fixed decimal point Fixed
Decimal decimal / NUMBER Numbers with a fixed decimal point Fixed
Float float / FLOAT 32-bit floating point numbers Fixed
Short Float real / FLOAT Less than 32-bit point decimal number
Long Float double precision / BINARY DOUBLE 64-bit floating point numbers
Money money / NUMBER Numbers with a fixed decimal point Fixed
Serial numeric / NUMBER Automatically incremented numbers Fixed
Boolean bit / SMALLINT Two opposing values (true/false; yes/no; 1/0)

 

Character data types :

 

Standard data type
DBMS-specific physical data type
Content
Length

Characters char / CHAR Character strings Fixed
Variable Characters varchar / VARCHAR2 Character strings Maximum
Long Characters varchar / CLOB Character strings Maximum
Long Var Characters text / CLOB Character strings Maximum
Text text / CLOB Character strings Maximum
Multibyte nchar / NCHAR Multibyte character strings Fixed
Variable Multibyte nvarchar / NVARCHAR2 Multibyte character strings Maximum

 

Time data types:

 

Standard data type
DBMS-specific physical data type
Content
Length

Date date / DATE Day, month, year
Time time / DATE Hour, minute, and second
Date & Time datetime / DATE Date and time
Timestamp timestamp / TIMESTAMP System date and time

 

Other data types :

 

Standard data type
DBMS-specific physical data type
Content
Length

Binary binary / RAW Binary strings Maximum
Long Binary image / BLOB Binary strings Maximum
Bitmap image / BLOB Images in bitmap format (BMP) Maximum
Image image / BLOB Images Maximum
OLE image / BLOB OLE links Maximum
Other User-defined data type
Undefined undefined Undefined. Replaced by the default data type at generation.

C++ vector容器类型

vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件  :

#include <vector>

使用vector有两种不同的形式,即所谓的数组习惯STL习惯

一、数组习惯用法

1. 定义一个已知长度的 vector :

vector< int > ivec( 10 );  //类似数组定义int ia[ 10 ];

可以通过ivec[索引号] 来访问元素

使用 if ( ivec.empty() ) 判断是否是空,ivec.size()判断元素个数。

 

2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如
vector< int > ivec( 10, -1 );
定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1 

对于内置数组 我们可以显式地把数组的元素初始化为一组常量值,例如 :
int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };

我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现,例如:
// 把 ia 的 6 个元素拷贝到 ivec 中
vector< int > ivec( ia, ia+6 );


被传递给ivec 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置,标记出来的元素范围也可以是数组的一个子集,例如 :

// 拷贝 3 个元素 ia[2], ia[3], ia[4]
vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );


3. 与内置数组不同 vector 可以被另一个 vector 初始化 或被赋给另一个 vector 例如
vector< string > svec;
void init_and_assign()
{
// 用另一个 vector 初始化一个 vector
vector< string > user_names( svec );
// …

// 把一个 vector 拷贝给另一个 vector
svec = user_names;
}

 

二、STL习惯用法

在 STL9中对vector 的习惯用法完全不同。我们不是定义一个已知大小的 vector,而是定义一个空 vector
vector< string > text;


1. 我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中
string word;
while ( cin >> word ) {
text.push_back( word );
// …
}

虽然我们仍可以用下标操作符来迭代访问元素
cout << “words read are: n”;

for ( int ix = 0; ix < text.size(); ++ix )
cout << text[ ix ] << ‘ ‘;

cout << endl;
但是 更典型的做法是使用 vector 操作集中的begin()和 end()所返回的迭代器 iterator
对 :
cout << “words read are: n”;

for ( vector<string>::iterator it = text.begin();
it != text.end(); ++it )
cout << *it << ‘ ‘;

cout << endl
iterator 是标准库中的类,它具有指针的功能 


*it;
对迭代器解引用,并访问其指向的实际对象
++it;

向前移动迭代器 it 使其指向下一个元素

2. 注意 不要混用这两种习惯用法, 例如,下面的定义
vector< int > ivec;
定义了一个空vector 再写这样的语句
ivec[ 0 ] = 1024;
就是错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数 。

3. 类似地 当我们用一个给定的大小定义一个 vector 时,例如  :
vector<int> ia( 10 );
任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是 下面的错误在初学者中并不少见 :
const int size = 7;
int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 };
vector< int > ivec( size );

for ( int ix = 0; ix < size; ++ix )
ivec.push_back( ia[ ix ]);
程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入。

10个步骤让你成为高效的Web开发者

 

要成为高产、高效的 Web 开发者,这需要我们做很多工作,来提高我们的工作方式,以及改善我们的劳动成果。

下面是 10 个提高效率的步骤,虽然不能保证解决你在开发中的所有问题,但至少是非常实用的,可以简化你的 Web 开发流程,使开发的每一个环节快速、流畅。还可以帮助你节省大量的时间,以便开发更多、更好的项目。

1. 使用 Web 开发框架

一个良好的 Web 开发框架,可以帮助你:

  • 解决常见的 Web 开发问题,如标准的 Web 页面布局、Web 表单处理、浏览器兼容性解决等)。
  • 测试 Web 开发的 bug、安全和性能。
  • 使代码重用更容易,因为有一个统一的 API。
  • 社区开发的插件和工具,可以进一步增强开发(jQuery 有很多非常棒的插件,比如用户界面、图像和网页排版等)。
  • 遵循编码的最佳实践和伟大的编程设计模式,你甚至不用去思考。
  • 有开发社区和用户的支持,你可以获取帮助以及进行协作。
  • 初学者使用起来非常容易。

所有这些好处都可以节省你的时间以及提高项目的质量。

有很多 Web 开发框架你可以选择:

  • 完整的 Web 应用程序框架,如 Ruby on Rails 或 CakePHP。
  • JavaScript 框架,如 jQuery、MooTools 和其他许多鲜为人知但很优秀的用于处理用户界面、客户端逻辑和 Ajax 的 JavaScript 框架。
  • 如果你想加快视觉层设计,你可以使用一个 CSS 框架(如,Toast),或者网页布局框架(如,960 Grid System)。
  • 专门的框架,如用于内容管理系统开发的 WordPress 主题框架。
  • 现在还有移动 Web 应用程序开发框架。

  2. 建立一个代码片段库

IT 界的名言“不要重复发明轮子”。回收你的代码,创建一个你最喜欢和经常使用的代码片段集,并确保代码组织良好,可以被轻易搜索到。

最简单的方法是,你可以在硬盘中建立源代码目录。但这未必是最好的方式。

一种方法是使用允许保存代码片段的源代码编辑器或 IDE。例如,Notepad++的 SnippetPlus 插件和 Dreamweaver 内置的片段面板。


Adobe Dreamweaver 的片段面板

另一种方法就是使用专门的片段工具,如 Snippet 或 Snipplr.。

你甚至可以使用自己喜欢的代码库/版本控制系统,像 Git,来更好地管理你的源代码。

3. 使用正确的工具

这应该是显而易见的,确保你拥有一些优秀的、你知道如何更有效地使用的工具和装备。

如果你是一个网页设计师,你可能需要 Photoshop 和 Illustrator。如果你是一名开发人员,你需要一些优秀的 Web 开发应用程序,以帮助你完成工作。

当然,各领域之间、开发者之间的工具集是不同的。重要的是你的工具应该可以帮助你尽可能地高效完成工作。

4. 收集和整理免费设计资源

在网络上有许多网站放出免费设计资源。你可以将这些网站添加到你的 RSS 阅读器,它们每发布一个免费软件或资源,你就可能了解到。

对于一个设计师来说,这样可以得到大量的图标、PSD 模板、矢量插图、风景图像、按钮、GUI 元素、Photoshop 笔刷、字体库和各种其他的设计元素。

5. 冲刺式工作(短时间高效工作)

不要连续工作几个小时,这样你的效率可能会下降,随着时间的推移,你的工作品质也会下降。每次连续工作 10~20 分钟,可以保持你大脑活跃,可以更好地产生新的想法。

在短时间的工作,意味着你总是有一个新鲜的开始。

6. 休息

冲刺工作最重要的部分是休息。让你的头脑休息至关重要。利用这些休息时间将自己的工作区分开,干些其他工作或运动一下。

另外,除非有必要,否则不要计划你的时间。你不必每次都工作 15 分钟,然后休息 5 分钟。要选一个好的休息点,有一个舒适的休息。

你可以参考番茄工作法。

  7. 在学习上投入时间

短期内,不断学习、跟上行业形势并保持领先是很费时间的。

然而,通过在自我提高上投入时间,你可以在工作的其他方面节省时间,可以增加你的劳动成果并提高工作质量。

8. 不要过度规划

你不应该严格规划你的每一天。你的头脑需要有一定的灵活性,需要有时间去认真思考。

请一定要保持你的时间表灵活变化。我发现,超过规划的工作,我可能会一拖再拖。

9. 不要急于直接开始

这和过度规划是两个极端。虽然你不应该过度规划,但你需要计划下。

每当你开始一个项目的工作,确保知道你对这个项目的期望。做网页设计项目时,需要了解客户期望做的、首页内容、颜色设置等工作。

了解有关项目的某些内容,可能会使你工作在正确的方向,而不至于在黑暗中摸索。

在我开始客户的网站项目工作时,我需要先确定:

  • 颜色方案
  • 网站的目标
  • 他们能够提供的任何内容
  • 他们已经拥有的任何设计思路

10. 不要使事情复杂化

这可能是所有这些最重要的一条:不要使你的工作复杂化。不要做更多的工作,不要在给定的时间内为自己分配过多的工作。

我不主张给你的客户提供最少的交付时间,但你肯定也不能提供最长的时间。

要明白客户他们需要什么,不能多也不能少。

另外,不要制定过于复杂的开发战略。让事情简单一些。

来源:kuqin.com

GET方法和POST方法的区别

1、GET方法多用于不改变系统设置的情况;比如获取数据。但是也可以用来向服务器传递数据。方法是把参数义键值对的形式放到URL里面。数据量有限制。

POST方法用于改变服务器的设置,向服务器传递数据。方法是把数据放到传送体里面,不在URL里面显示。而且数据量没有限制。

Http 状态码一览表

Monday, March 20th, 2006

1**:请求收到,继续处理
2**:操作成功收到,分析、接受
3**:完成此请求必须进一步处理
4**:请求包含一个错误语法或不能完成
5**:服务器执行一个完全有效请求失败

100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本

200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求

300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除

400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求
也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下
一级服务器不能满足请求

500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本

 

==========================================================

英文版:

100:Continue
101:Switching Protocols
102:Processing

200:OK
201:Created
202:Accepted
203:Non-Authoriative Information
204:No Content
205:Reset Content
206:Partial Content
207:Multi-Status

300:Multiple Choices
301:Moved Permanently
302:Found
303:See Other
304:Not Modified
305:Use Proxy
306:(Unused)
307:Temporary Redirect

400:Bad Request
401:Unauthorized
402:Payment Granted
403:Forbidden
404:File Not Found
405:Method Not Allowed
406:Not Acceptable
407:Proxy Authentication Required
408:Request Time-out
409:Conflict
410:Gone
411:Length Required
412:Precondition Failed
413:Request Entity Too Large
414:Request-URI Too Large
415:Unsupported Media Type
416:Requested range not satisfiable
417:Expectation Failed
422:Unprocessable Entity
423:Locked
424:Failed Dependency

500:Internal Server Error
501:Not Implemented
502:Bad Gateway
503:Service Unavailable
504:Gateway Timeout
505:HTTP Version Not Supported
507:Insufficient Storage

关于一个点歌社交网络的构想

来源:Oneplus

在广播还比较流行的二十几年前,电台点歌是件非常时髦的事情。当时,人们可接触的文化媒介并不丰富,沟通方式也受到多方面的制约。点歌成了传达感情的一种浪漫而有效的方式。可惜这一美好的形式随着广播的没落而逐渐淡出人们的视线。

Web2.0时代,社交网络大面积兴起,Facebook、Twitter、豆瓣等等,成功的产品无一不是抓住了人与人之间的合理聚合点。“点歌”这一形式,虽然因为时间的推移而被人们遗忘,但是依旧具有强大的聚合力。首先,因为愈来愈大的社会、经济、生活压力,使得人们进行传统社交的时间愈来愈少。其次,文字图片类的社交网络,随着人们的广泛参与呈现出信息过载的趋势。在表达丰富复杂感情时,往往显得浅薄。点歌的形式,一方面,并不要求施事与受事者同时参与,保证了时空的相对自由;一方面,相对文字图片,要求参与者做出诸如选曲、赠言等等更多的工作,在表情达意方面有着先天的优势。

基于上述一些想法,我认为,一个以“点歌”聚合的社交网络,在当下是有需求的。

我在Google、百度等搜索引擎中查询“点歌”、“点歌网站”,反馈的结果都是提供手机点歌服务的网站,并没有与上述想法契合的网站。依此,我认为,一个以“点歌”聚合的社交网络,在当下是有生存空间的。

细化这一构想,我认为,可以提供下面一些服务:

  • 注册会员之间可以点歌赠言
  • 有一个公共广播,播出公开的点歌赠言,并且可以评论寄语
  • 系统进行音乐、好友、唱片电商等推荐

这一社交网络的学术价值,显而易见。可以收集大量用户行为数据,甚至可以将点歌视为一种人工标注,开展“推荐”、“情感分析”等多方面课题研究。

当然,作为一个信息提供商,特别是音乐这一版权敏感的信息服务,运营是一件非常具有挑战的工作。在这方面我并没有什么经验或者好的想法。但是觉得,可以通过在高校里推广这一服务规避版权问题。

这篇文章的主要目的是浅尝辄止地分析这样一种社交网络形式。由于自己并非从事产品与市场方面的工作,对于问题的看法难免片面。还希望有缘人多提宝贵意见。更重要的是,虽然,我觉得这个创意还好,但是没有时间与精力去实现它。所以更希望有时间精力的小同学们愿意在将来的软件工程课上把它变成现实。

随手山寨了一个效果图,避雷针自备了。

一位老php程序员10年工作总结

这是转载自小灰灰空间,没写完google了一下找到了完整版本,他让我更加崇敬程序员这个职业 也给我的学习带来了很大的决心和信心 在此分享给大家 希望能给在这里的所有朋友遇到困难时候带来一些动力。。。

今年是我大学毕业满10年的日子,也是我投身it技术的第10年。一直想能对过去的经历做些回顾与反思,以更好地走向未来,但总没有笔。刚好csdn举办”讲述程序员的故事”征文,这件事成了一个引子,我终于趁着暑期有时间,敲了一天键盘,便有了这篇人生自述。

10年对于一个人来说是比较长的一个阶段,10年之后,同期大学毕业的同学情况差异之大,让人叹息命运之变幻莫测。

我在此记录下了我的生活足迹,由于时间较长,有些事记得不太清了,但我是尽量真实的记录当时的情况,有兴趣看我这篇长文的人请把我看成是一个在你我中间一块生活,一起喜怒哀乐,一起努力的平凡人,相信我们之间会有很多跨越时空的情感交流。

好,就说到此吧。

继续阅读“一位老php程序员10年工作总结”

回顾2011展望2012

弄了这个博客已经有一段时间了,但还从未有过认真的写一点什么。前段时间一直忙于考试。大学就是这样,15周的幼儿园+1周的高三,往往到临近考试了才发觉时间的宝贵。也佩服自己居然能把一个学期的知识压缩到一周内学完,也佩服考试制度让高等教育也显得是如此的轻薄。好了,不扯淡了。说说2011年的事吧。

印象中我记得的今年发生的最遥远的事情,恐怕是暑假了。暑假在学校兼职一个月,说来也算运气好吧,抽签似的让我去参加那个兼职,挣了点小钱。然后就是去深圳玩了一趟,花了一大半。在那段日子里,看到现代外出打工青年的不容易,其中很多事初中毕业就出去了的。他们几乎没有假期可言。奉献了自己的青春给祖国现代化建设中,却没有得到应有的回报。想想毕业后,是否也和他们一样?

第二件比较重要的事就是当上了学社联宣传部部长,说实话,当初去竞选决定也是临时决定的,纯粹凭借想锻炼自己胆量而去的,尽管大一在宣传部呆了一年,主要是负责社团网站的一些小事。但也还算尽职尽责。结果让我竞选上了。于是乎,一大堆的事情接踵而至,海报?喷绘?写字?没一样是我会的,以前也没出过这些东西。但是没办法,既然选择了就要承担起责任。开始招新,创办了一个网络工作室,于是社团的事情占据了我大部分时间。

第三件事就是网络中心。大一下期就在网络中心实习过一段时间,这学期成为了正式网管。网管最大的好处就是拥有不断网账号(当初我是这么认为的),然后就是一定金额的补贴。这段时间认识了很多喜欢计算机的同学,能在工作之余讨论一些技术问题也不错。其中开学那一阵子比较忙,后来基本都是些老问题了,在解决一些基本问题方面长进了很多。至少这个装系统已经了如指掌了(其实做技术的只有更牛没有最牛,这也一样)

再回到最近的考试吧,总的来说感觉还行,大学果真考试考得时综合素质:临场发挥,随机应变、突击记忆,找规律,考敏捷,考人情。无所不体现了大学考试的综合水平测试水准。。。

2012如约而来,我想,在2012需要做的第一件事 就是把新的社团网站建立起来,让工作室走向正轨。这需要我在今后的时间里继续加强学习,起到带头作用。在这一年里给社团留下一点什么吧。

继续努力学习是有必要的,一定要专业知识学好。这学期专业知识真的没有用心,计算机网络,数据库,操作系统 等等,基本上都是考试了才看书,学到的都是一些皮毛,没有深层次的思考,下学期决不能这样。再说四级,,第一次参加四级考试可以说是惨败吧,本来基础不好,然后就是荒废了1年多,再怎么样,世界末日前总得把这4级过了。

先写这么多吧,想到了再补上。。。

 

sql server 中取十位随机字符串

———————-字符串中有重复的字符——————–
declare @l int
declare @s varchar(26)
declare @r varchar(200)
set @l = 10 ———–设置返回长度,最大长度受@r的限制
set @s = ‘abcdefghijklmnopqrstuvwxyz’
set @r = ”
while len(@r) < @l
begin
set @r = @r + substring(@s, cast(rand() * 100 as int) % 26 +1 , 1)
end
print @r

——————–字符串中无重复字符———————————-

declare @s varchar(26)
declare @r varchar(8)
declare @t varchar(1)
set @s = ‘abcdefghijklmnopqrstuvwxyz’
set @r = ”

while len(@r) < 8
begin
set @t = substring(@s, cast(rand() * 100 as int) % 26 +1 , 1)
if charindex(@t, @r) < 1
set @r = @r + @t
end
print @r

——————–字符串中无重复字符函数———————————-
ALTER FUNCTION dbo.GetRandStr
(@Count INTEGER = 8)
RETURNS VARCHAR
AS
BEGIN
DECLARE @STR VARCHAR(100), @STR1 VARCHAR(36)
DECLARE @I INTEGER, @J INTEGER, @M INTEGER, @N INTEGER
SET @STR1 = ‘0123456789abcdefghijklmnopqrstuvwxyz’
SET @I = 1
SET @M = 1
SET @STR = ”
WHILE @I <= 36
BEGIN
HERE:
SET @M = CAST(dbo.RAND() * 100 / 2.75 AS INTEGER)
IF (@M < 1) OR (@M = @N) OR (CHARINDEX(SUBSTRING(@STR1, @M ,1), @STR)) > 0 GOTO HERE
SET @N = @M
SET @STR = @STR + SUBSTRING(@STR1, @M ,1)
SET @I = @I + 1
END
RETURN @STR
END

word打不开总提示进入安全模式解决办法

今天给一位老师解决电脑故障时遇到这个问题,就是直接打开桌面上的word文件打不开,弹出如下窗口,由于我好久都没用过2003版本的word了,这个现象只听说过要删掉某个模板文件,具体哪一个实在想不起了,于是百度了一下,找到了一下解决办法,也供大家参考,如果有补充请留言。。

  1. 首先找到下面这个文件夹:
    C:Documents and SettingsAdministratorApplication DataMicrosoftTemplates
    会看到“Normal.dot” 这个文件,这是公用模板文件,应该是损坏了,直接将其删除,排除故障。
    如果找不到这个文件夹,可将C:Documents and SettingsAdministratorApplication DataMicrosoftTemplates复制粘贴到地址栏即可找到 normal.dot这个文件。
  2. 模板文件一般存在下面的路径,看图
    注意:文件夹是隐藏着的,所以文件夹选项要选择显示隐藏的文件和文件夹,进入下图,把这两个模板删除,重新启动word,即可正常打开。
    路径:C:Documents and SettingsAdministratorApplication DataMicrosoftTemplates
  3. 用安全模式打开word以后,新建一个文档如下图
  4. 在word右边就会出现下图,然后点击“本机上的模板”
  5. 在弹出的模板框,右键删除掉命名为“空白模板”的模板,点击确定,重启word即可正常打开