sql server 表变量存储过程中使用循环,需要定义临时变量a(@i),0<@i<15.请问该怎么定义它。

MS SQL Server 存储过程详解
&存储过程的优缺点
  ◆优点:
  执行速度更快。存储过程只在创造时进行编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程执行速度更快。
  存储过程用于处理复杂的操作时,程序的可读性更强、网络的负担更小。
  使用存储过程封装事务性能更佳。
  能有效的放注入,安全性更好。
  可维护性高,在一些业务规则发生变化时,有时只需调整存储过程即可,而不用改动和重编辑程序。
  更好的代码重用。
  ◆ 缺点:
  存储过程将给服务器带来额外的压力。
   存储过程多多时维护比较困难。
  移植性差,在升级到不同的数据库时比较困难。
  调试麻烦,SQL语言的处理功能简单。
  总之复杂的操作或需要事务操作的SQL建议使用存储过程,而参数多且操作简单SQL语句不建议使用存储过程。
存储过程定义
  存储过程是一组 Transact-SQL 语句,它们只需编译一次,以后即可多次执行。因为 Transact-SQL 语句不需要重新编译,所以执行存储过程可以提高性能。&
  触发器是一种特殊的存储过程,不由用户直接调用。创建触发器时,将其定义为在对特定表或列进行特定类型的数据修改时激发。
存储过程的设计规则
  CREATE PROCEDURE 定义自身可以包括任意数量和类型的 SQL 语句,但以下语句除外。
  不能在存储过程的任何位置使用这些语句。
   CREATE AGGREGATE、 CREATERULE、CREATE DEFAULT、 CREATESCHEMA、CREATE 或 ALTER FUNCTION、CREATE 或 ALTER TRIGGER、CREATE 或 ALTER PROCEDURE、CREATE&& 或 ALTER VIEW、SET PARSEONLY、SET SHOWPLAN_ALL、SET SHOWPLAN_TEXT、 SET SHOWPLAN_XML、USE database_name
  其他数据库对象均可在存储过程中创建。可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可。
  可以在存储过程内引用临时表。
  如果在存储过程内创建本地临时表,则临时表仅为该存储过程而存在;退出该存储过程后,临时表将消失。
  如果执行的存储过程将调用另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表在内。
  如果执行对远程 Microsoft SQL Server 2005 实例进行更改的远程存储过程,则不能回滚这些更改。远程存储过程不参与事务处理。
  存储过程中的参数的最大数目为 2100。
  存储过程中的局部变量的最大数目仅受可用内存的限制。
  根据可用内存的不同,存储过程最大可达 128 MB
实现存储过程
CREATE&{&PROC&|&PROCEDURE&}&[schema_name.]&procedure_name&[&;number&]&
&&&&&&&&&&&&&[&{ @parameter [ type_schema_name.&]&data_type }&[&VARYING&]&[&= default&]&[&[OUT [ PUT&]&]&--名称、类型、默认&#20540;、方向
&&&&&&&&&&&&&[&,...n&]&
&&&&&&&&&[&WITH &procedure_option& [,...n&]
&&&&&&&&&[&FOR REPLICATION&]&
&&&&&&&&&AS&
&&&&&&&&&&{&&sql_statement&&[;][&...n&]&|&&method_specifier&&}&--SQL语句
&&&&&&&&&[;]
&&&&&&&&&&procedure_option&&::=&
&&&&&&&&&&&&&[&ENCRYPTION&]
&&&&&&&&&&&&&[&RECOMPILE&]&--运行时编译
&&&&&&&&&&&&&[&EXECUTE_AS_Clause&]
&&&&&&&&&&sql_statement&&::=&{&[&BEGIN&]&statements&[&END&]&}
&&&&&&&&&&method_specifier&&::=&EXTERNALNAME assembly_name.class_name.method_name
执行存储过程
  使用 Transact-SQL EXECUTE 语句。如果存储过程是批处理中的第一条语句,那么不使用 EXECUTE 关键字也可以执行存储过程,使用 sp_procoption 让SQLSERVER 自动执行存储过程&
&&&&&&&&&& sp_procoption [@ProcName = ] 'procedure' , [ @OptionName = ] 'option'&&& , [@OptionValue = ] 'value' --过程的名称、option 的唯一&#20540;为 startup、设置为开启(true 或 on)还是关闭(false 或 off)。
用TSQL语句编写存储过程
一、变量和参数
&&&&&&&&&& DECLARE 语句通过以下操作初始化 Transact-SQL 变量:
&&&&&&&&&& 指定名称。名称的第一个字符必须为一个 @。
&&&&&&&&&& 指定系统提供的或用户定义的数据类型和长度。对于数&#20540;变量还指定精度和小数位数。对于 XML 类型的变量,可以指定一个可选的架构集合。
&&&&&&&&&& 将&#20540;设置为 NULL。
&&&&&&&&&& 如:DECLARE @MyCounter int
&&&&&&&&&& 第一次声明变量时,其&#20540;设置为 NULL。若要为变量赋&#20540;,请使用 SET 语句。这是为变量赋&#20540;的首选方法。也可以通过 SELECT 语句的选择列表中当前所引用&#20540;为变量赋&#20540;。
&&&&&&&&&& 参数用于在存储过程和函数以及调用存储过程或函数的应用程序或工具之间交换数据:&
&&&&&&&&&& 输入参数允许调用方将数据&#20540;传递到存储过程或函数。
&&&&&&&&&& 输出参数允许存储过程将数据&#20540;或游标变量传递回调用方。用户定义函数不能指定输出参数。
&&&&&&&&&& 每个存储过程向调用方返回一个整数返回代码。如果存储过程没有显式设置返回代码的&#20540;,则返回代码为 0。
二、流程控制语句
&&&&&&&&&& 1、BEGIN 和 END 语句
&&&&&&&&&&&&&&BEGIN 和 END 语句用于将多个Transact-SQL 语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条 Transact-SQL 语句的语句块的任何地方,都可以使用 BEGIN 和 END 语句。
IF (@@ERROR && 0)
&&&&& SET @ErrorSaveVariable = @@ERROR
&&&&& PRINT 'Error encountered, ' &#43;&
&&&& CAST(@ErrorSaveVariable AS VARCHAR(10))
&&&&&&&&&& 2、GOTO 语句
&&&&&&&&&&&&&&GOTO 语句使 Transact-SQL 批处理的执行跳至标签。不执行 GOTO 语句和标签之间的语句。
&&&&&& IF(1=1)
&&& GOTO calculate_salary
&&& print 'go on' --条件成立则跳过此句。
&&&&&& calculate_salary:
&&&& print 'go to'
&&&&&&&&&& 3、IF...ELSE 语句
&&&&&&&&&&&&&&IF 语句用于条件的测试。得到的控制流取决于是否指定了可选的 ELSE 语句:
&&& if(1=1)
&&&& print 1
&&& else if(2=2)
&&&& print 2
&&& else if(3=3)
&&&& print 3
&&&& print 0
&&&&&&&&&& 4、RETURN 语句
&&&&&&&&&&&&&&&&RETURN 语句无条件终止查询、存储过程或批处理。存储过程或批处理中 RETURN 语句后面的语句都不执行。当在存储过程中使用 RETURN 语句时,此语句可以指定返回给调用应用程序、批处理或过程的整数&#20540;。如果RETURN 未指定&#20540;,则存储过程返回 0
&&&&&&&&&& 5、WAITFOR 语句
&&&&&&&&&&&&&&&&WAITFOR 语句挂起批处理、存储过程或事务的执行,直到发生以下情况:&
&&&& 已超过指定的时间间隔。
&&&& 到达一天中指定的时间。
&&&& 指定的 RECEIVE 语句至少修改一行或并将其返回到 Service Broker 队列。
&&&&&&&&&&&&&&&&WAITFOR 语句由下列子句之一指定:
&&&&&&&&&&&& DELAY 关键字后为 time_to_pass,是指完成 WAITFOR 语句之前等待的时间。完成 WAITFOR 语句之前等待的时间最多为 24 小时。&
&&&&& WAITFOR DELAY '00:00:02'
&&&&& SELECT EmployeeID FROM&&&E
&&&&&&&&&&&& TIME 关键字后为 time_to_execute,指定 WAITFOR 语句完成所用的时间。
&&&&& BEGIN
&&&&&&&&& WAITFOR TIME '22:00';
&&&&&&&&& DBCC CHECKALLOC;
&&&&& END;
&&&&&&&&&&&&RECEIVE 语句子句,从 Service Broker 队列检索一条或多条消息。使用 RECEIVE 语句指定 WAITFOR 时,如果当前未显示任何消息,该语句将等待消息到达队列。
&&&&&&&&&&&&TIMEOUT 关键字后为 timeout,指定Service Broker 等待消息到达队列的时间长度(毫秒)。可以在 RECEIVE 语句或 GET CONVERSATION GROUP 语句中指定 TIMEOUT。
&&&&&&&&&& 6、WHILE...BREAK 或 CONTINUE 语句
&&&&&&&&&&&&&&&&只要指定的条件为 True 时,WHILE 语句就会重复语句或语句块。REAK 或 CONTINUE语句通常和WHILE一起使用。BREAK 语句退出最内层的 WHILE 循环,CONTINUE 语句则重新开始 WHILE 循环。
&&declare&@Num&int
&&declare&@ID&int
&&declare&@i&int
&&set&@i=1
&&while(exists(select&*&from&T&where&Num&5&&&
))&--获取数量小于5的记录
&&&select&@Num=Num,@ID=ID&from&T&where&Num&5&order&by&ID&desc
&&&print&Str(@i)&#43;&'编号:'&#43;Str(@ID)&#43;&'&&#20540;'&#43;str(@Num)
&&&update&T&set&Num=Num*2&where&ID=@ID
&&&set&@i=@i&#43;1
&&&if(@i&3)
&&&&&break&--退出循环
&&&&&&&&&& 7、CASE 语句
&&&&&&&&&&& CASE 函数用于计算多个条件并为每个条件返回单个&#20540;。CASE 函数通常的用途是将代码或缩写替换为可读性更强的&#20540;
--用法一:
&&select&ID,
&&& Grade=Case&Num&&
&&when&&1&then&'不及&#26684;'&&
&&when&&2&then&'不及&#26684;'&
&&when&&3&then&'不及&#26684;'
&&when&&4&then&'良好'
&&else&'优秀'
&&---用法二:
&&select&ID,
&&& Grade=Case&&&
&&when&&& Num&3&then&'不及&#26684;'&&
&&when&&& Num=3&then&'及&#26684;'&
&&when&&& Num=4&then&'良好'
&&when&&& Num&4&then&'优秀'
三、运行时生成语句
&&&&&&&&&&Transact-SQL 支持使用下列两种方法于运行时在 TTransact-SQL 脚本、存储过程和触发器中生成 SQL 语句:
使用 sp_executesql 系统存储过程执行Unicode 字符串。sp_executesql 支持与RAISERROR 语句类&#20284;的参数替换。
&&&&&&&&&& 使用 EXECUTE 语句执行字符串。EXECUTE 语句不支持已执行字符串中的参数替换。
四、处理数据库引擎错误&
&&&&&&&&& 在 Transact-SQL 中有两种方式可以获取错误信息:
&&&&&&&&& 1、在 TRY...CATCH 构造的 CATCH 块的作用域内,您可以使用以下系统函数:
&&&&&&&&&&& ERROR_LINE(),返回出现错误的行号。
&&&&&&&&&&& ERROR_MESSAGE(),返回将返回给应用程序的消息文本。该文本包括为所有可替换参数提供的&#20540;,如长度、对象名或时间。
&&&&&&&&&&&ERROR_NUMBER() 返回错误号。
&&&&&&&&&&&ERROR_PROCEDURE(),返回出现错误的存储过程或触发器的名称。如果在存储过程或触发器中未出现错误,该函数返回 NULL。
&&&&&&&&&&&ERROR_SEVERITY() 返回严重性。
&&&&&&&&&&&ERROR_STATE(),返回状态。
&&&&&&&&&& 2、在执行任何 Transact-SQL 语句之后,您可以立即使用 @@ERROR 函数测试错误并检索错误号。
&&&&&&&&&& RAISERROR
&&&&&&&&&&&&RAISERROR 用于将与 SQL Server Database Engine 生成的系统错误或警告消息使用相同&#26684;式的消息返回到应用程序中。
&&&&&&&&&& 3、PRINT&
&&&&&&&&&&&& PRINT 语句用于将消息返回到应用程序。PRINT 采用字符或 Unicode 字符串表达式作为参数,并将字符串作为消息返回到应用程序。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7886次
排名:千里之外
原创:20篇
(2)(1)(1)(6)(2)(15).SQLSERVER 存储过程 语法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
.SQLSERVER 存储过程 语法
大小:12.75KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢32040人阅读
SQLSERVER存儲過程的寫法格式規格
********************************************************&author:Susan***&date:<span style="FONT-WEIGHT: COLOR: #05/<span style="FONT-WEIGHT: COLOR: #/<span style="FONT-WEIGHT: COLOR: #***&expliation:如何寫存儲過程的格式及例子,有游標的用法!***&本版:SQL&SERVER&版!******************************************************/在存儲過程中的格式規格:CREATE&PROCEDURE&XXX/*列舉傳入參數1:名稱,2:類型,包括長度Eg:@strUNIT_CODE&varCHAR(3)*/參數1,參數2&&&&&As/*定義內部參數1:名稱,2:類型,包括長度Eg:@strUNIT_CODE&varCHAR(3)*/Declare參數1,參數2&&&&&/*初始化內部參數Eg:SET&@strUNIT_CODE=&&*/Set參數1的初始值Set參數2的初始值&&&&/*過程的主內容區Trascation:這裡起到的作用是,如果他中間的任何一個執行錯誤,就全部執行都返回,這裡sql&sever&7.0以前一定要寫入,以後的就可以省略Return:結束這支sp*/Begin&trascation&&&&/*&&&&&&&&1:可以取得需要的值以存在內部參數中&&&&&Eg:SELECT&@strUNIT_CODE=UNIT_CODE&FROM&UNIT&WHERE&&&.2:可以用取到的或傳入的參數進行判斷,來進行update,insert,delete&等等操作eg:&IF&@strUNIT_CODE=&&&&&&&&&&&BEGIN&&&&&//具體的操作EndElseBegin&&&&//具體的操作End&3:有關游標的問題&&&&&Eg:&&&&&&&&declare&db&cursor&for&&&&&&&//聲明一個游標(db為其名稱)&&&&&&&&SELECT&UNIT_NAME&FROM&UNIT&WHERE&LEFT(UNIT_CODE,2)=LEFT(@strTO,2)//記錄集&&&&&&&&open&db&&&&&&&&&&&&&&&&&//打開游標&&&&&&&&&&&&fetch&next&from&db&into&@strUNIT_NAME&//將第一個值放入一個參數中&&&&&&&&while&@@fetch_status&=&0&---存在本筆值向下循環(0:順利執行;-1:失敗,或資料列超出結果集;-2:擷取的資料列已遺漏)&&&&&&&&BEGIN&&&&&&&&&&&&&----開始循環&&&&&&&&&&&&&&&&&&&&&&&&//個體操作&&&&&&&&End&&&&&&&&&&&&&&&&----結束循環&&&&&&&&Close&db&&&&&&&&&&&&---關閉游標deallocate&db&&&&&&&&&//移除資料指標參考*/Commit&trascationReturn&下面是一個例子CREATE&PROCEDURE&TEST_2@strTO&VARCHAR(<span style="FONT-WEIGHT: COLOR: #)ASDECLARE&@strUNIT_NAME&VARCHAR(<span style="FONT-WEIGHT: COLOR: #0),&@strSQL&VARCHAR(<span style="FONT-WEIGHT: COLOR: #00),&@Link&VARCHAR(<span style="FONT-WEIGHT: COLOR: #),&@Link1&VARCHAR(<span style="FONT-WEIGHT: COLOR: #)&SET&@strUNIT_NAME=''SET&@strSQL=''SET&@Link=''SET&@Link1=''&/*處理update&的部分EXEC&TEST_2&'011'EXEC&TEST_2&''SELECT&UNIT_NAME&FROM&UNIT&WHERE&UNIT_CODE='011'*/BEGIN&TRANSACTION&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&IF&@strTO&&''&&&&&&&&BEGIN&&&&&&&&&&&&&&&&UPDATE&UNIT&SET&UNIT_NAME=REPLACE(UNIT_NAME,'*','')&WHERE&UNIT_CODE=@strTO&&&&&&&&END&&&&&&&&&&&&&ELSE&&&&&&&&BEGIN&&&&&&&&&&&&&&&&UPDATE&UNIT&SET&UNIT_NAME=UNIT_NAME+'*'&WHERE&UNIT_CODE='<span style="COLOR: #ff'&&&&&&&&END/*EXEC&TEST_2&'011'功能說明:本sp用於處理cursor問題*/&&&&&&&&IF&&&@strTO&&''&&&&&&&&&&&&BEGIN&&&&&&&&&&&&&&&&&&&&&&&&declare&db&cursor&for&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&--必需聲明在查詢的前面&&&&&&&&&&&&&&&&SELECT&UNIT_NAME&FROM&UNIT&WHERE&LEFT(UNIT_CODE,<span style="FONT-WEIGHT: COLOR: #)=LEFT(@strTO,<span style="FONT-WEIGHT: COLOR: #)---取到相關信息&&&&&&&&&&&&END&&&&&&&&ELSE&&&&&&&&&&&&BEGIN&&&&&&&&&&&&&&&&&&&&&declare&db&cursor&for&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&--必需聲明在查詢的前面&&&&&&&&&&&&&&&&&&&&&SELECT&UNIT_NAME&FROM&UNIT&WHERE&LEFT(UNIT_CODE,<span style="FONT-WEIGHT: COLOR: #)=LEFT('<span style="COLOR: #ff',<span style="FONT-WEIGHT: COLOR: #)---取到相關信息&&&&&&&&&&&&END&&&&&&&&open&db&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&---開起取到的信息&&&&&&&&fetch&next&from&db&into&@strUNIT_NAME&&&&&&&&---把第一筆放入@strUNIT_NAME中&&&&&&&&while&@@fetch_status&=&<span style="FONT-WEIGHT: COLOR: #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&---表示存在本筆資料&&&&&&&&BEGIN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&----開始循環&&&&&&&&&&&&&&&&set&@strSQL&=@strSQL+@Link1+@Link+&@strUNIT_NAME&----設定保存的值&&&&&&&&&&&&&&&&fetch&next&from&db&into&@strUNIT_NAME&&&&&&&&&&&&&&&&&&&&&&&----進行下次循環&&&&&&&&&&&&&&&&SET&@Link=CHAR(<span style="FONT-WEIGHT: COLOR: #)&+CHAR(<span style="FONT-WEIGHT: COLOR: #)&&&&&&&&&&&&&&&&SET&@Link1=','&&&&&&&&END&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&----結束循環&&&&&&&&close&db&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&---關閉信息&&&&&&&&deallocate&db&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&---移除資料指標參考SELECT&@strSQLCOMMIT&TRANSACTIONRETURN
如果循环insert的例子
DECLARE&@strLoginID&VARCHAR(<span style="FONT-WEIGHT: COLOR: #)BEGINdeclare&db&cursor&forSELECT&LoginID&FROM&dbo.s_Users&WHERE&len(UnitCoding)&in(<span style="FONT-WEIGHT: COLOR: #,<span style="FONT-WEIGHT: COLOR: #)ENDopen&dbfetch&next&from&db&into&@strLoginIDwhile&@@fetch_status&=&<span style="FONT-WEIGHT: COLOR: #&BEGINinsert&into&s_P_Userselect&@strLoginID,LevelID&from&s_P_User&where&LoginID&=&'aa'fetch&next&from&db&into&@strLoginIDENDclose&dbdeallocate&db
一、TRUNCATE二、Select INTO 建表&&&&把一个表中的数据复制到另外一个表中。三、Insert INTO Select四、补充:临时表&&&&临时表存储在系统数据库tempdb中&&&&临时表会被系统隐式地丢弃---------------------------------------------------------五、存储过程(**)&&&&一、简介:&&&&   存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后&&&&存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行它,&&&&在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。&&&&系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取&&&&信息,从而为系统管理员管理SQL Server。 用户自定义存储过程是由用户创建,并能完成&&&&某一特定功能,如:查询用户所需数据信息的存储过程。&&&&&&&&  存储过程具有以下优点&&&&1.存储过程允许标准组件式编程(模块化设计)&&&&存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而且数&&&&据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代码只包含存&&&&储过程的调用语句,从而极大地提高了程序的可移植性。&&&&&&&&&&&&&&&&2.存储过程能够实现快速的执行速度   如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理的&&&&执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析优&&&&化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时都要进行&&&&编译和优化,因此速度相对要慢一些。&&&&&&&&&&&&&&&&&&&&3.存储过程能够减少网络流量   对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL &&&&语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否&&&&则将是多条SQL 语句从而大大增加了网络流量降低网络负载。&&&&&&&&&&&&&&&&4.存储过程可被作为一种安全机制来充分利用   系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限&&&&制。&&&&二、变量&&&&@I&&&&三、流程控制语句(if else | select case | while )&&&&Select ... CASE 实例&&&&DECLARE @iRet INT, @PKDisp VARCHAR(20)&&&&SET @iRet = '1'&&&&Select @iRet = &&&&CASE&&&&&&&&WHEN @PKDisp = '一' THEN 1&&&&&&&&WHEN @PKDisp = '二' THEN 2&&&&&&&&WHEN @PKDisp = '三' THEN 3&&&&&&&&WHEN @PKDisp = '四' THEN 4&&&&&&&&WHEN @PKDisp = '五' THEN 5&&&&&&&&ELSE 100&&&&END&&&&四、存储过程格式&&&&&&&&&&&&创建存储过程&&&&Create Proc dbo.存储过程名&&&&存储过程参数&&&&AS&&&&执行语句&&&&RETURN&&&&执行存储过程&&&&GO*********************************************************/
--&变量的声明,sql里面声明变量时必须在变量前加@符号&&&&DECLARE&@I&INT--&变量的赋值,变量赋值时变量前必须加set&&&&SET&@I&=&<span style="FONT-WEIGHT: COLOR: #--&声明多个变量&&&&DECLARE&@s&varchar(<span style="FONT-WEIGHT: COLOR: #),@a&INT--&Sql&里if语句&&&&IF&条件&BEGIN&&&&&&&&执行语句&&&&END&&&&ELSE&BEGIN&&&&&&&&执行语句&&&&END&&&&&&&&&&&&&&&&DECLARE&@d&INT&&&&set&@d&=&<span style="FONT-WEIGHT: COLOR: #&&&&IF&@d&=&<span style="FONT-WEIGHT: COLOR: #&BEGIN&&&&--&打印&&&&&&&&PRINT&'正确'&&&&END&&&&ELSE&BEGIN&&&&&&&&PRINT&'错误'&&&&END--&Sql&里的多条件选择语句.&&&&DECLARE&@iRet&INT,&@PKDisp&VARCHAR(<span style="FONT-WEIGHT: COLOR: #)&&&&SET&@iRet&=&<span style="FONT-WEIGHT: COLOR: #&&&&Select&@iRet&=&&&&CASE&&&&&&&&WHEN&@PKDisp&=&'一'&THEN&<span style="FONT-WEIGHT: COLOR: #&&&&&&&&WHEN&@PKDisp&=&'二'&THEN&<span style="FONT-WEIGHT: COLOR: #&&&&&&&&WHEN&@PKDisp&=&'三'&THEN&<span style="FONT-WEIGHT: COLOR: #&&&&&&&&WHEN&@PKDisp&=&'四'&THEN&<span style="FONT-WEIGHT: COLOR: #&&&&&&&&WHEN&@PKDisp&=&'五'&THEN&<span style="FONT-WEIGHT: COLOR: #&&&&&&&&ELSE&<span style="FONT-WEIGHT: COLOR: #0&&&&END--&循环语句&&&&WHILE&条件&BEGIN&&&&&&&&&&&&执行语句&&&&END&&&&DECLARE&@i&INT&&&&SET&@i&=&<span style="FONT-WEIGHT: COLOR: #&&&&WHILE&@i&<span style="FONT-WEIGHT: COLOR: #00000&BEGIN&&&&&&&&set&@i=@i+<span style="FONT-WEIGHT: COLOR: #&&&&END&&&&--&打印&&&&PRINT&@i--&TRUNCATE&删除表中的所有行,而不记录单个行删除操作,不能带条件&&&&/*&&&&TRUNCATE&TABLE&在功能上与不带&Where&子句的&Delete&语句相同:二者均删除表中的全部行。但&TRUNCATE&TABLE&比&Delete&速度快,且使用的系统和事务日志资源少。&&&&Delete&语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE&TABLE&通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。&&&&TRUNCATE&TABLE&删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用&Delete。如果要删除表定义及其数据,请使用&Drop&TABLE&语句。&&&&对于由&FOREIGN&KEY&约束引用的表,不能使用&TRUNCATE&TABLE,而应使用不带&Where&子句的Delete&语句。由于&TRUNCATE&TABLE&不记录在日志中,所以它不能激活触发器。&&&&TRUNCATE&TABLE&不能用于参与了索引视图的表。&&&&示例&&&&&&&&下例删除&authors&表中的所有数据。*/&&&&&&&&&&&&&&&&TRUNCATE&TABLE&authors&&&&&&&&&&&&&&&&--&Select&INTO&从一个查询的计算结果中创建一个新表。&数据并不返回给客户端,这一点和普通的--&Select&不同。&新表的字段具有和&Select&的输出字段相关联(相同)的名字和数据类型。&&&&&&&&&&&&&&&&select&*&into&NewTable&&&&&&&&&&&&from&Uname--&Insert&INTO&Select&&&&&&&&--&表ABC必须存在&&&&&&&&--&把表Uname里面的字段Username复制到表ABC&&&&&&&&Insert&INTO&ABC&Select&Username&FROM&Uname--&创建临时表&&&&&&&&Create&TABLE&#temp(&&&&&&&&&&&&UID&int&identity(<span style="FONT-WEIGHT: COLOR: #,&<span style="FONT-WEIGHT: COLOR: #)&PRIMARY&KEY,&&&&&&&&&&&&UserName&varchar(<span style="FONT-WEIGHT: COLOR: #),&&&&&&&&&&&&Pwd&varchar(<span style="FONT-WEIGHT: COLOR: #),&&&&&&&&&&&&Age&smallint,&&&&&&&&&&&&Sex&varchar(<span style="FONT-WEIGHT: COLOR: #)&&&&&&&&)&&&&&&&&--&打开临时表&&&&&&&&Select&*&from&#temp--&存储过程&&&&&&&&--&要创建存储过程的数据库&&&&&&&&Use&Test&&&&&&&&--&判断要创建的存储过程名是否存在&&&&&&&&&&&&if&Exists(Select&name&From&sysobjects&Where&name='csp_AddInfo'&Andtype='P')&&&&&&&&&&&&--&删除存储过程&&&&&&&&&&&&Drop&Procedure&dbo.csp_AddInfo&&&&&&&&Go&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&--&创建存储过程&&&&&&&&Create&Proc&dbo.csp_AddInfo&&&&&&&&--&存储过程参数&&&&&&&&@UserName&varchar(<span style="FONT-WEIGHT: COLOR: #),&&&&&&&&@Pwd&varchar(<span style="FONT-WEIGHT: COLOR: #),&&&&&&&&@Age&smallint,&&&&&&&&@Sex&varchar(<span style="FONT-WEIGHT: COLOR: #)&&&&&&&&AS&&&&&&&&--&存储过程语句体&&&&&&&&insert&into&Uname&(UserName,Pwd,Age,Sex)&&&&&&&&&&&&values&(@UserName,@Pwd,@Age,@Sex)&&&&&&&&RETURN&&&&&&&&--&执行&&&&&&&&GO&&&&&&&&&&&&&&&&&&&&&&&&--&执行存储过程&&&&&&&&EXEC&csp_AddInfo&'Junn.A','<span style="COLOR: #ff',<span style="FONT-WEIGHT: COLOR: #,'男'
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:80733次
排名:千里之外
原创:14篇
转载:20篇
评论:49条
(1)(1)(2)(3)(3)(10)(1)(6)(1)(6)

我要回帖

更多关于 sql server 临时变量 的文章

 

随机推荐