加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 临时表 游标 存储过程拼sql 日期函数等

发布时间:2020-12-12 14:39:47 所属栏目:MsSql教程 来源:网络整理
导读:1、 创建临时表 ?????? 方法一: ???? create table #临时表名(字段1 约束条件, ??????????????????????字段2 约束条件, ??????????????????.....) ????????create table ##临时表名(字段1 约束条件, ??????????????????????????字段2 约束条件, ???????????

1、

创建临时表
?????? 方法一:
???? create table #临时表名(字段1 约束条件,
??????????????????????字段2 约束条件,
??????????????????.....)
????????create table ##临时表名(字段1 约束条件,
??????????????????????????字段2 约束条件,
??????????????????????.....)
????????方法二:
???? select * into #临时表名 from 你的表;
?????? select * into ##临时表名 from 你的表;
注:以上的#代表局部临时表,##代表全局临时表

例如:create table #tblRefundPaperPassengerNames
??(
???refundApplicationId int,
???passengerNames varchar(500)
??)


查询临时表
???? select * from #临时表名;
?????? select * from ##临时表名;

删除临时表
???? drop table #临时表名;
?????? drop table ##临时表名;

?

2、游标的定义及使用

declare @curName cursor;

declare @Name int;//定义游标就得定义一个盛放游标内容的容器,数据类型相同

set @curName =Cursor for select X from #table

open @curName

Fetch Next from? @curName? Into @Name

While @@fetch_status =0

begin

  ************;

  Fetch Next from @curName Into @Name

end

Close @curName ;

Deallocate @curName ;

?

?

3、

存储过程里判断一个参数和一个字段的关系时 必须select语句得有括号,例如

???? IF @Price<= (SELECT MIN(MarkupPrice) FROM IOrderPriceList)???


4.在存储过程里,动态的拼sql语句,除了想要返回子结果集,有的时候还需要一些对原结果集的sum,cout之类的
然后赋给out参数 ,传出该值???

declare @sql nvarchar(4000);
declare @SumOperateFee money;
set @sql=' select * from orders where reservationtime > ''2009-7-22'''--简易的sql ,实际中复杂很多
set @sql='select @SumOperateFee=sum(a.pricedue) from ( '+@sql+' ) as a '

EXECUTE sp_executesql
?@sql,
?N'@SumOperateFee money output',
?@SumOperateFee output;

这样 就把exec 执行的结果 赋给变量了 ,而这个变量时out类型的,在c#端可取值,
但我翻了个严重的错误,一个很低级的错误,
在执行sql语句的时候,提示“过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型”,弄了半天弄的一头雾水,
结果google了一下,才知道,它指的是这个@sql的类型,而我竟然定义的是varchar? ,悔呀,浪费了好多时间

?

5、在sql中执行存储过程的写法

exec? IOrderAddPriceRule_GetAddPrice? 'CGQ','SFO','FM','2009-7-15'?? SPName后面直接跟参数,不需要参数名=参数值这样的形式

?

6.declare @msg nvarchar(100);

set @msg='''gda'''+','+'''ab''';

select * from t_a where a.col1 in (@msg);

本来想用@msg拼接出in里面的参数 ,如 in ('gda','ab')? 可是用变量代替的话 却总是出错,还未解决为什么呢

?

7.sqlserver的日期函数,贴上备用

getdate()? dateadd(day,2,'2004-10-15')? datediff(day,'2004-09-01','2004-09-18')? day(),month(),year()

DATEPART(month,'2004-10-15')?

.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)?

datename 返回代表指定日期的指定日期部分的字符串

datename(weekday,'2004-10-15')????? --返回:星期五

select 本年第多少周=datename(week,'2004-10-15')
,今天是周几=datename(weekday,'2004-10-15')

?convert(varchar(10),getdate(),120)? 得到的结果为:2010-10-01

提醒:在使用日期函数时,其日期值应在1753年到9999年之间,这是SQL Server系统所能识别的日期范

?

8、两个整数相除得到百分比
?? Cast(Convert(decimal(10,2),(1.0 *Count(OrderId)/@OrderNum)*100) as varchar(20))+'%' As CancelPercent??????? ----decimal(10,2) 四舍五入保留两位小数

?

9、写存储过程的时候要注意规范易读性
/*
?功能:添加修改订单合作商,如果存在订单的合作商则修改,否则添加一条新纪录,有出票合作商时要更新订单表的出票合作商
?参数描述:
??@orderId ???订单ID
??@ticketIssuedCopartnerId?出票合作商ID
??@deliverCopartnerId??配送合作商ID
??@receiptMoneyCopartnerId?收款合作商ID
??@ticketIssuedCopartnerName?出票合作商名称
??@deliverCopartnerName??配送合作商名称
??@receiptMoneyCopartnerName?收款合作商名称
?创建日期:2008-09-12 10 :32? 创建人:小倩
*/
CREATE??? PROCEDURE [dbo].[Orders_Copartner_Update] ..........

10、注册sql缓存依赖

aspnet_regsql -S 192.168.5.211 -U sa -P 123456 -d AirTicket -ed
aspnet_regsql -S 192.168.5.211 -U sa -P 123456 -d AirTicket -t AIrDistance -et

在visual studio 2005 命令提示窗口执行
(表 AspNet_SqlCacheTablesForChangeNotification 自动建表?)

?

11

今天打开企业管理器-->表-->打开,居然开不到数据,提示“未知错误:7008007E”,还以为是sqlserver出问题了呢,卸了装,装了卸,

操,还那个德行,没管用,google一下,原来缺补丁,补丁下下来了,又她妈不会打,我还真是够笨的,从网上摘了点,增强记忆。

查询分析器:select @@version? 结果是:Microsoft SQL Server? 2000 - 8.00.194 (Intel X86)?? Aug? 6 2000 00:57:48?? Copyright (c) 1988-2000 Microsoft Corporation? Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读