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)