sqlserver 暫存資料表 遊標 預存程序拼sql 日期函數等

來源:互聯網
上載者:User

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',0,'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)

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.