亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL SERVER tips

系統 2049 0

1判斷一個表或視圖是否在 數據庫中

if exists (select * from sysobjects where name='v1' and xtype='V')
drop view v1
go

sysobjects是一個系統表,如果判斷對象是table,則xtype='U'

如果是trigger則xtype='TR'

2用sql建立交叉表
一個常見的例子
http://iouniuniu.cnblogs.com/archive/2005/10/24/5238.html

有時候需要將結果旋轉以便在水平方向顯示列,水平方向顯示行,即所謂的交叉表(PrvotTable)。在SQL顯示它也比較的簡單:
1:結果確定的交叉表:
Year Quarter Amount(表Prvot)
---- ------- ------
1990 1 1.1
1990 2 1.2顯示成:Year Q1Q2Q3 Q4
1990 3 1.3------------ ------
1990 4 1.41990 1.1 1.21.3 1.4
因為Quarter是固定的,姑且稱其為結果確定的交叉表吧。實現的方法如下:
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROMPrvot
GROUP BY Year(具體參考SQL的幫助,搜索交叉數據表即可)
2:結果不確定的交叉表:
假如Quarter是動態的變動的,那么就不能簡單的使用上述的case...when了,可以構造動態的SQL語句,來實現上述的SUM語 句。
declare @goodscode varchar(20)
declare @goodsname varchar(40)
declare @str varchar(2000)

set @str = ''

declare goods_cur cursor for
select goodscode,goodsname
from pub_goods
order by goodscode

open goods_cur
fetch next from goods_cur into @goodscode,@goodsname
while @@fetch_status = 0
begin
set @str = @str + 'sum(case goodscode when ''' + @goodscode + ''' then targetqty else 0 end) as ''' + @goodsname + ''','
fetch next from goods_cur into @goodscode,@goodsname
end
close goods_cur
deallocate goods_cur
set @str = substring(@str,1,len(@str)-1)
exec('select districtcode,' + @str + ' from ( select distinct districtcode,goodscode,targetqty from report_hospital_use where
districtcode is not null ) as t group by districtcode')

3:現在的問題是,能不能不使用游標來實現上述的SUM語句的構造過程。

一個更復雜的例子(待補充)

4在表的定義中,可以定義一種字段(列) ,該類字段的時間是通過其他字段的計算來獲取的,在sql server的文檔中稱為 計算列computed column

該字段的定義是一個表達式,在sql中表達為

f1 as f2+f3+f4,在可視化建表的過程中在屏幕下面的‘公式’里面設置f2+f3+f4

表達式以其他非計算列為參數,還包括常量,還可以使用系統函數。不能引用其他表的列或使用子查詢,不能在主健,唯一健,外健,另一個列的default子句中使用計算列。

計算列不能直接修改或插入,而是計算得到的。

視圖是實現列的首選(?)

5時間,日期的相關計算

CONVERT(nvarchar(10),count_time,121): CONVERT為日期轉換函數,一般就是在時間類型(datetime,smalldatetime)與字符串類型(nchar,nvarchar,char,varchar)相互轉換的時候才用到的函數.3個參數,第1個參數為,轉換后的大小,第2個為,轉換日期的字段或函數,第3個為轉換的格式:

- | 0 or 100 | mon dd yyyy hh:miAM(或PM)
-------------------------------------------------------------------------------------------------
1 | 101 | mm/dd/yy
-------------------------------------------------------------------------------------------------
2 | 102 | yy-mm-dd
-------------------------------------------------------------------------------------------------
3 | 103 | dd/mm/yy
-------------------------------------------------------------------------------------------------
4 | 104 | dd-mm-yy
-------------------------------------------------------------------------------------------------
5 | 105 | dd-mm-yy
-------------------------------------------------------------------------------------------------
6 | 106 | dd mon yy
-------------------------------------------------------------------------------------------------
7 | 107 | mon dd,yy
-------------------------------------------------------------------------------------------------
8 | 108 | hh:mm:ss
-------------------------------------------------------------------------------------------------
- | 9 or 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
-------------------------------------------------------------------------------------------------
10 | 110 | mm-dd-yy
-------------------------------------------------------------------------------------------------
11 | 111 | yy/mm/dd
-------------------------------------------------------------------------------------------------
12 | 112 | yymmdd
-------------------------------------------------------------------------------------------------
- | 13 or 113 | dd mon yyyy hh:mi:ss:mmm(24小時制)
-------------------------------------------------------------------------------------------------
14 | 114 | hh:mi:ss:mmm(24小時制)
-------------------------------------------------------------------------------------------------
- | 20 or 120 | yyyy-mm-dd hh:mi:ss(24小時制)
-------------------------------------------------------------------------------------------------
- | 21 or 121 | yyyy-mm-dd hh:mi:ss:mmm(24小時制)
-------------------------------------------------------------------------------------------------

例子:select convert(char(10),getdate(),120)

結果:2006-08-25

另外,關于時間,日期的計算還有year(),month(),dateapart,等在sql server中查找時間函數可以查到更多函數。

6獲取表中所有列的名字

select name from syscolumns where id = object_id('yourTableName');

但是這樣獲得的結果是按name的字母排序的,所以為了按設計時的順序獲得列名,應該

select name from syscolumns where id = object_id('yourTableName') order by colorder

7關于元數據函數的問題

元數據函數返回有關數據庫和數據庫對象的信息。

COL_LENGTH fn_listextendedproperty
COL_NAME FULLTEXTCATALOGPROPERTY
COLUMNPROPERTY FULLTEXTSERVICEPROPERTY
DATABASEPROPERTY INDEX_COL
DATABASEPROPERTYEX INDEXKEY_PROPERTY
DB_ID INDEXPROPERTY
DB_NAME OBJECT_ID
FILE_ID OBJECT_NAME
FILE_NAME OBJECTPROPERTY
FILEGROUP_ID @@PROCID
FILEGROUP_NAME SQL_VARIANT_PROPERTY
FILEGROUPPROPERTY TYPEPROPERTY
FILEPROPERTY

所有元數據函數都具有不確定性。每次用一組特定的輸入值調用它們時,所返回的結果不總是相同。

8錯誤:備份集中備份的數據庫與現有數據庫 ‘xxx’不同

還原是看一下“選項”--“將數據庫文件還原為:”列表里各文件的“物理文件名”由于原來的機器上的安裝目錄和你的機器可能不同,要改一下。例如:Z:/Program Files/Microsoft SQL Server/MSSQL/data/xxx.ldf 改為 D:/Program Files/Microsoft SQL Server/MSSQL/data/xxx.ldf

選上“在現有數據庫上強制還原”

9打不開企業管理器

http://www.devdao.com/article/339595.html

癥狀: windows2003系統,點擊sql server 2000 企業管理器.結果出現警告框說MMC cannot open the file "C:/Program Files/Microsoft SQL Server/80/Tools/Binn/sql server enterprise manager.msc",...

解法: 刪掉C:/Documents and Settings/YourUserName/Application Data/Microsoft/MMC/SQL Server Enterprise Manager

備注: 這只是對我適用的解決辦法.還可能是權限等問題.

10將foxpro的dbf數據文件轉換為ms sql的表

http://www.xiaoa.net/DBF/SQL/32/Server/32/286007
--如果TableName 不存在
Select * Into TableName from openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=D:/','select * from [TEST.DBF]')

--如果TableName 存在
Insert TableName Select * from openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=D:/','select * from [TEST.DBF]')


問題:如果將本地的dbf轉換到遠程的sql服務器中時,出錯!


11 將表在兩個數據庫服務器間轉移

有個本地數據庫服務器,一個注冊在本地的遠程數據庫服務器,要在兩個服務器間轉移表,最簡單的方法是用sql server自帶的導出數據功能(導入也可以。)。


12 日期時間數據有三種格式,

日期的輸入格式很多大致可分為三類

SQL SERVER tips


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 97在线观看成人免费视频 | 中文字幕一区二区三区亚洲精品 | 成人精品免费网站 | 日韩欧美亚洲中字幕在线播放 | 一级成人 | 国产亚洲精aa在线观看香蕉 | 亚洲人成高清 | 亚洲精品色 | 免费精品美女久久久久久久久久 | 手机看片久久国产免费不卡 | 中文字幕一区二区三区在线观看 | 欧美综合中文字幕久久 | 91精品国产一区二区三区左线 | 久久爱成人网 | 成人久久在线 | 在线国产福利 | 99久热re在线精品视频 | a国产成人免费视频 | 91久久亚洲精品国产一区二区 | 午夜性爽视频男人的天堂在线 | 天天想夜夜操 | 成人国产一区二区 | 亚洲国产一区二区三区四区 | 伊人激情久久综合中文字幕 | 亚洲欧美激情精品一区二区 | 日本a视频在线观看 | 欧美黄色a | 午夜免费福利影院 | 欧美午夜在线视频 | 国产97色在线 | 亚洲 | 99久久免费精品高清特色大片 | 日韩中文字幕久久精品 | 五月婷婷久久综合 | swag系列国产精品 | 久久久久久久网站 | 国产日韩精品一区在线观看播放 | 国内精品91久久久久 | 永久免费精品影视网站 | 久久久这里只有精品免费 | 中文字幕一区二区日产乱码 | 婷婷在线免费视频 |