随笔分类 -  Stored Procedures

摘要:有一个程序,是记录公司域用户打印记录,它使用的是MS Access database(A服务器 32bit)。想以这些记录做一些Summary报表,报表实现是另外一台服务器Intranet web 服务(B服务器 64bit)。如查在非一台服务器读取远端的Access数据,也许需要数据库文件共享。网管说不能在服务器安装32 bit的Ole 驱动,不也能共享A服务器的Access数据库文件。Insus.NET需要怎样做? 只有想法是把这些记录每天定时转存一次至公司的数据库(MS SQL Server 2008 R2)(C服务器)。写一个控制台应用程序,放在Access数据库同一目录,然后让A服务 阅读全文
posted @ 2013-03-13 14:50 Insus.NET 阅读(1330) 评论(0) 推荐(1) 编辑
摘要:朋友要求,做一个多屏图片切换效果,以作为网站广告宣传。朋友提供样版参考http://www.lanrentuku.com/js/jiaodiantu-895.html刚开始听到此要求时,心想一定很简单照抄就行了。但是朋友还有进一步要求,是要在网站管理后统一管理,添加图片,链接以及标题。还能编辑这些信息。前台不必在每次更新时,去修改前台代码。即然朋友有此要求,Insus.NET照做就是了。首先看看效果(今年是蛇年,刚好Windows 8 Themes也有几张蛇图片,因此拿它来做例子了。)在数据库创建一个表,来存储相关信息,如图片名称,链接以及标题等:[dbo].[SwitchFocusNews] 阅读全文
posted @ 2013-01-12 12:58 Insus.NET 阅读(1053) 评论(0) 推荐(3) 编辑
摘要:某一些情况,我们开发时,不能以添加先后进行排序,也不能以某一字段进行升序或降序排序。只好让用户自己排序。此篇就是以此要求,进行演示的。数据表中,应有此排序的字段,可以根据记录的多少来定义它的数据类型,如INT等。数据的存储过程,应该应用到事务。以怕异常出现,而出现断序现象。在添加时,应该找到存在记录中,最大的序号,如第一次添加,即是说最大记录为空,那它的的值为1。在更新时,需要处理用户输入小于或等于 0值,它真正的值是1;而输入大于 最大排序号时,它应该于最大值。在删除时,应该是比被删除记录的排序号大的,都应该减1。Insus.NET实现的效果如下:创建数据表View Code SET ANS 阅读全文
posted @ 2013-01-11 19:52 Insus.NET 阅读(1114) 评论(0) 推荐(1) 编辑
摘要:开发要求,前台一次性将多笔记录存入数据库中。也就是说,将一个DataTable作为一个参数传入。而数据库的存储过程,也得有一个表数据类型(sql2008) http://www.cnblogs.com/insus/articles/1916591.html为了实现这个功能,Insus.NET先从数据库,然后至程序前台,一步一步演示给大家。在数据库中创建一个表[Orders]:View Code CREATETABLE[dbo].[Orders]([Orders_nbr]INTIDENTITY(1,1)PRIMARYKEY,[ItemCode]NVARCHAR(50)NOTNULL,[UM]N. 阅读全文
posted @ 2012-09-22 22:56 Insus.NET 阅读(10072) 评论(7) 推荐(3) 编辑
摘要:开发过程中,Insus.NET经常性遇上一对多的数据关系,并需要存入数据中。就以下图为例,一个拉号可以对应多台机器。下图有三个铵钮,分别为[分配机器], [取消分配]和[查看分配]。想存储这些分配数据,需要在数据库创建一个表存储。LaHaoJiQi SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdate:2012-09-13--Description:存储拉号与机器分配记录--=================== 阅读全文
posted @ 2012-09-13 15:13 Insus.NET 阅读(992) 评论(0) 推荐(1) 编辑
摘要:应网友要求,使用VB.NET写的一个小网站。使用了.NET Framework 4.5,数据库是SQL Server 2012,你可以看到所有SELECT,INSERT,UPDATE and DELETE都是在存储过程实现。Ajax在这个程序中也少不了。网站虽然很简单,但在后台管理与前台显示。后台的默认登录帐号为sa,密码为12345678. 密码当然还可以更改。还可以添加管理员用户。后台有文章目录管理,文章管理,添加,编辑与删除。使用了CuteEditor_for_NET6文本编辑器。如果你在运行这个编辑器,不能使用。只需从official网站重新下载,把cuteeditor.lic覆盖即可 阅读全文
posted @ 2012-06-03 17:27 Insus.NET 阅读(1819) 评论(2) 推荐(3) 编辑
摘要:Insus.NET在前段时间,曾分享过一篇文章的上一篇和下一篇导航是使用了用户控件实现,并拉入文章显示的页面。这样子,显示文章最基本需要去读取三次数据库获取数据,一次是获取文章信息,另两次是在用户控件被使用,是获取前一篇和下一篇的标题和ID。为了改善这个性能的问题,故产生此篇:去除用户控件,直接在读取文章时,把上一篇的ID与标题与下一篇的ID与标题一起获取。这样一次获取,节能60%。可以参考获取文章的存储过程:usp_Article_GetByPrimaryKey SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--====================== 阅读全文
posted @ 2012-03-23 23:54 Insus.NET 阅读(813) 评论(3) 推荐(1) 编辑
摘要:由于不是固定在一台电脑开发,经常需要把数据备份与恢复。或者是帮助客户修改程序,接收到客户备份好的数据,需要在电脑恢复。这样就需要将数据库用户映射到 SQL Server 登录名。如何映射?可使用下面的系统存储过程:EXECUTEsp_change_users_login'update_one','user','login'上面的'update_one'是执行的操作,将当前数据库中指定的 user 链接到现有的 SQL Serverlogin。'user'是指当数据库的用户名。'login' 就你将要 阅读全文
posted @ 2012-03-16 22:02 Insus.NET 阅读(1840) 评论(0) 推荐(2) 编辑
摘要:计算一串数字中每个数字出现的次数,可以这样子,先判断输入的字符串是不是数字组成,还是否包含有其它字符。接下来拆分这一串字符串,每个字符插入一个表变量中,最后使用GROUP BY进行分组。CalNumOfChtInStr SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdate:2012-02-23--Description:Calculatethenumberofcharactersinthestring--==== 阅读全文
posted @ 2012-02-23 12:18 Insus.NET 阅读(1459) 评论(0) 推荐(2) 编辑
摘要:此篇博文是这篇密码需要带特殊字符的升级篇,前一篇的存储过程产生的密码随机数,有可能一个随机数就包含有过多的特殊字符,而且第一个字符就有可能是特殊字符。因此产生此篇,随机密码首字符不能为数字与特殊字符但必须包含且只有一个特殊字符。另外还修正了特殊字符集长度问题,使用特殊字符集长度减一(LEN(@SpecialCharacter) - 1) 这样当你增减特殊字符集时,再不需多次地方一同修改。修正前:SUBSTRING(@SpecialCharacter,CONVERT(TINYINT,ROUND(RAND()*6+1,0)),1)修正后:SUBSTRING(@SpecialCharacter,CO 阅读全文
posted @ 2012-02-16 16:03 Insus.NET 阅读(2904) 评论(0) 推荐(1) 编辑
摘要:今天分享密码策略的重试次数与登录失败锁定持续的小功能。软件中,需要一个管理介面,可让系统管理设置相关的参数,这些设置将保存于数据库中,这两个参数初始化为0,如果大于0,说明管理员已经启用此功能。如下:从功能上看,只是涉及至验证用户与登录时需要实现在功能,Insus.NET不想改动太多地方,特别是程序部分,因此Insus.NET只是修改用户登录验证的一个存储过程:逻辑太约分几步,首先是密码参数表获取上图中两个参数:View Code DECLARE@NumberOfRetriesTINYINT=[dbo].[udf_GetPasswordParameterValue](1)DECLARE@Loc 阅读全文
posted @ 2012-02-08 09:21 Insus.NET 阅读(1376) 评论(0) 推荐(1) 编辑
摘要:“Hi,我看了你这篇 三个随机产生密码的存储过程 最后一种的写法随机产生密码,觉得很好,并应用在我的程序中,但是上星期老板对我说,要在随机产生的密码带有特殊字符。我再次测试过之后,才发现你的函数产生的密码只是大小写英文字母和数字,并无包含特殊字符,我要怎样改它呢?”上面全文来自QQ留言。解决你的问题,需要使用上面相同一篇博文的第二种方法相结合,才可以,其实方法还有其它的,下面仅是Insus.NET想到的一种,仅供你参考,有问题,请继续来信,留言或在线讨论:usp_RandomPassword ALTERPROCEDURE[dbo].[usp_RandomPassword](@LengthINT 阅读全文
posted @ 2012-02-06 11:17 Insus.NET 阅读(1521) 评论(0) 推荐(1) 编辑
摘要:需要为程序加一些功能,如下表,这些设置可让管理员根据自己实际情况设置,缺省值为0不作任限制。由于不是全新开发,而是在现在有程序补充功能,Insus.NET不想在程序作过多更改,只好修改存储过程来实现它们。现下面把实现上图highlight的选项功能分享出来。保持密码原有记录值,只要管理员设置了密码策略之后,用户更改自己的密码时,就会应用到了新密码策略。首先写一个获取参数值的自定义函数:udf_GetPasswordParameterValue SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--================================= 阅读全文
posted @ 2012-02-06 10:22 Insus.NET 阅读(712) 评论(0) 推荐(1) 编辑
摘要:协助一个朋友做一个小网站,其中一个功能,是让用户注册成功之后,系统将随机产生一个登录密码,并自动发送至注册邮箱中,朋友的做法是为了用户使用真实邮箱。随机产生密码,Insus.NET总结了三个,并分别写成了存储过程。第一个,usp_RandomPassword CREATEPROCEDURE[dbo].[usp_RandomPassword](@LengthINT=8)ASBEGINDECLARE@RandomPasswordNVARCHAR(MAX)=N'',@LINT=1WHILE@L<=@Length--循环密码长度BEGIN--随机产生每一位字符,ASCII码48至 阅读全文
posted @ 2012-01-31 14:50 Insus.NET 阅读(973) 评论(1) 推荐(2) 编辑
摘要:“大哥,看了你这篇博文http://www.cnblogs.com/insus/archive/2012/01/27/2330058.html,我怎样才能产生10个且每个有8位不相同的随机数字?”刚才有位网友在SKYPE问及如上问题。好的,Insus.NET也正想写一个存储过程来应用上面这篇的SQL语句,你可以参考如下的存储过程,如果还问题请继续讨论。usp_RandomNumber CREATEPROCEDURE[dbo].[usp_RandomNumber](@LenINT=1,--随机数位数@RowsINT=1--随机笔数)ASBEGINDECLARE@TASTABLE([RandomN 阅读全文
posted @ 2012-01-27 14:33 Insus.NET 阅读(1063) 评论(0) 推荐(1) 编辑
摘要:从SQL Server的视图INFORMATION_SCHEMA 中用INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE 和INFORMATION_SCHEMA.TABLE_CONSTRAINTS两个视图INNER JOIN在一起,可以列出需要的数据,下面Insus.NET把它写成一个自定义函数:udf_KeyColumns CREATEFUNCTION[dbo].[udf_KeyColumns]()RETURNSTABLEASRETURN(SELECTkcu.[TABLE_NAME],kcu.[COLUMN_NAME],kcu.[ORDINAL_POSITI 阅读全文
posted @ 2012-01-19 16:59 Insus.NET 阅读(415) 评论(0) 推荐(1) 编辑
摘要:客户要求,要对一个敏感数据表进行Audit跟踪。如果记录被更新时,要把旧新保存起来,是谁更改了记录,什么时候更新的等相关信息。还有一个主要问题就是客户不确定具体要跟踪那个字段,希望自己决定。Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段。还要创建另外一个表[Audit],就是存储跟踪记录的表:Audit SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[Audit]([Audit_nbr][int]IDENTITY(1,1)NOTN 阅读全文
posted @ 2012-01-18 12:50 Insus.NET 阅读(2017) 评论(0) 推荐(1) 编辑
摘要:为了实现报表,写了一个日期选择功能。可以参考下图:下面内容是在2011年8月21日更新添加的:实现这个功能,需要在数据库准备星期与月份的数据:星期函数:http://www.cnblogs.com/insus/articles/1622988.html月份函数:http://www.cnblogs.com/insus/articles/1535448.html准备好数据源之后,当然是写存储过程了,Insus.NET会以星期与月份分开写出来,首先是星期:usp_Week_GetByDate SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERPROCEDU 阅读全文
posted @ 2011-08-13 01:35 Insus.NET 阅读(1217) 评论(13) 推荐(1) 编辑
摘要:实现一个AuditLog的功能,是B/S结构专案。每个用户可以登录系统,在程序中操作数据(添加,更新和删除)需要实现记录操作跟踪。是谁添加,更新和删除的,这些信息将会插入至AuditLog表中。一般情况之下,在SQL的触发器中,只能取到(SQL验证sa;Windows验证Domain\xxx)。这些用户名,达不到效果,不能真正反映到是谁操作的。下面是让你清楚,怎样实现在SQL触发器或存储过程中获取在程序登录的用户,是在插入,更新或删除的存储过程,把登录程序当前用户传入进去。在存储过程中,再把相关信息存入局部(#)临时表中,这样子,在触发器即可获取了。下面代码示例,以一个[Member]表作例, 阅读全文
posted @ 2011-07-21 13:51 Insus.NET 阅读(2405) 评论(2) 推荐(1) 编辑
摘要:这段时间,需要把一些C#处理的逻辑程序,搬移至SQL的存储过程中去。下面这个例子,就是怎样使用SQL的IN去替换C#的“||”参考代码,cs:View Code boolhub=false;boolstore=false;if(dataRow["Warehouse"].ToString()=="CF3"||dataRow["Warehouse"].ToString()=="CW2"){hub=true;}else{store=true;}这段代码,经Insus.NET移至SQL的存储过程之后,变为:View Cod 阅读全文
posted @ 2011-05-20 13:59 Insus.NET 阅读(478) 评论(0) 推荐(2) 编辑