菜鸟涛

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

向五一啦。。。

今天上午参加了english training,哎,That 's very boring...Maybe My english is pretty poor!

昨天忘记了一个asp.net 上一个很重要的事件:

Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        
If Not Me.IsPostBack Then
            
'Me.txtEventID.Visible = False
            
Me.rdEdit.Checked = True
            
Me.rdNew.Checked = False
        
End If     

 End Sub

 

Page_Load顾名思义了,就是asp页面加载时, 可以调用这个Load事件。其作用就是可以对asp页面一些组件设置状态。如上述代码就对radio进行默认的checked。那么

 If Not Me.IsPostBack Then 是干什么用的呢?它就是判断是否每次页面刷新加载时,都要对一些组件设置状态。通俗的讲就是只在页面第一次加载时进行设置。如果第2次,第3次...n次refresh页面就不会对一些组件设置状态。注意是refresh刷新。

 

今天要写一些复杂的sql server存储过程啦,说真滴搞java开发的,存储过程真的写的很less。先看看语法吧:

CREAT PROCEDURE [rsvp].[Pro_InsertEvent]
    @EventId VARCHAR(
14)
AS
BEGIN   
    SET NOCOUNT ON;
    

END 

 

Simple。注意@EventId Varchar(14)相当于vb.net中function或sub里ByVal, 传进来的参数。当然也可以输出数据如:@ReturnVal int output 

  SET NOCOUNT ON; 的含义:(摘抄)

使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息 
语法:SET NOCOUNT { ON | OFF } 
默认情况下为 ON (sql server 2008)

当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。 
当 SET NOCOUNT 为 OFF 时,返回计数。

即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。

当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 

 

 献上写的存储过程的代码:

ALTER PROCEDURE [rsvp].[Pro_InsertEventOption]
    
-- Add the parameters for the stored procedure here
    @EventId VARCHAR(14),
    
@EventDateFrom DATETIME
    
@EventDateTo DATETIME,
    
@Where VARCHAR(500)
    
AS
BEGIN
    
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
 SET ANSI_WARNINGS OFF;
 
SET NOCOUNT ON ;
 
 
IF @Where IS NOT NULL
 
BEGIN
     
DECLARE @sql VARCHAR(1500)
     
DECLARE @timesheetId INT
     
DECLARE @dayInt INT
     
SET @dayInt = ( SELECT DATEDIFF(DAY@EventDateFrom@EventDateTo)
                   )
     
DECLARE @i INT
     
SET @i = 0 
     
WHILE @i <= @dayInt 
        
BEGIN
            
set @sql=''
            
SET @timesheetId=(SELECT Id FROM rsvp.EventTimesheet WHERE EventId=@EventId AND EventDate=DATEADD(DAY,@i,@EventDateFrom)) 
            
SELECT @sql='INSERT INTO rsvp.EventOption(TimeSheetId ,OptionNo ,CateDesc ,SubCateDesc ,
                      IsShowForEvent ,
                      CateSeqNo ,
                      SubCateSeqNo
                    ) SELECT 
' +CAST(@timesheetId AS VARCHAR(11))+',et.OptionNo,et.CateDesc,et.SubCateDesc,et.IsShowForEvent,et.CateSeqNo,et.SubCateSeqNo
            FROM rsvp.EventOptionTemplate As et Where 
'+@Where
            
EXEC(@sql)
            
SET @i = @i + 1 
        
END
 
END 

END

还是蛮有趣的,存储过程中,一些函数的使用,后面必须跟着Begin。。End。如:

IF @i>0

BEGIN

-- do something for if

END 

这样就很明确IF判断到那里结束,还有循环语法,貌似只有while

while @i<1

BEGIN

--do something for each 

 

END 

 在就是如果想定义一个变量要使用DECLARE @name varchar(14) ,语法结构就是DECLARE  @variable  type。

注意:

INSERT INTO table_bak(.....) SELECT ... FROM table   是insert 数据到数据库已经存在的table表里。而SELECT 。。。INTO  table_bak FROM table 是先要去创建一个表,在insert数据到该表。

同时如果想使用 INSERT INTO table_bak(.....) SELECT ... FROM table时,要设置SET ANSI_WARNINGS OFF;

 

persist 

 

posted on 2011-04-28 09:27  菜鸟涛  阅读(195)  评论(0编辑  收藏  举报