| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> mssql >> SQL Server開發過程中的的常見問題總結
 

SQL Server開發過程中的的常見問題總結

2008-07-19 08:21:48  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  在SQL Server開發問題中你可能會問到的十個問題:

  1、什麽是常見的對表和字段的名字約束?

  2、有沒有可能在不了解T-SQL的情況下編寫存儲過程?

  3、T-SQL 中如何比較CLR 存儲過程和函數的性能?

  4、我如何在一個存儲過程中使用另一個存儲過程産生的結果?

  5、我如何解決SQL Server 2005的並發問題?

  6、在SQL Server 2005中用什麽工具替代了查詢分析器?

  7、你能提供一些有關SQL 和T-SQL的詳細信息嗎?

  8、SQL Server 2005 有沒有新的索引類型?

  9、我如何創建一個腳本在表中進行選擇?

  10、我如何列出那些沒有記錄的數據庫表?

  對于表和字段的常見名字約束

  回答:

  SQL Server 2000下的表和字段名稱有1到128字節的限制,並且遵循用于標識的規則。

  第一個字母必須是如下的一種:

  · Unicode Standard 2.0中規定的字母。

  Unicode對字母的定義包括:拉丁字母,從A到Z,除了來自其他語言的字母之外。

  · 下劃線(_),at符號(@),或者數字符號(#)

  在SQL Server中以這些符號作爲標識符的開始具有特殊的含義。一個以at符號(@)開頭的標識符表示一個本地的變量或者參數。一個以數字符號(#)開頭的標識符代表一個臨時表或者過程。一個以兩個數字符號(##)開頭的標識符標識的是一個全局臨時對象。

  一些Transact-SQL函數的名字以兩個at符號(@@)開頭。爲了避免與這些函數混淆,推薦你不要使用兩個at符號(@@)開頭的標識符。

  接下來的字母可以是以下的任意幾種:

  · Unicode Standard 2.0定義的字母

  · 來自基礎拉丁文或者其他語音的十進制數字

  · at符號(@),美元符號($),數字符號(#),或者下劃線

  標識符絕對不能是Transact-SQL的保留字。SQL Server保留了一些大寫和小寫的保留字。內建的空間或者特殊的字母都不允許出現,盡管你可以在好的老版本的Northwind中看到它們包含了內建的空間。你必須通過把它們括在括號中才可以訪問。

  不具有任何T-SQL知識的情況下編寫SQL Server2005存儲過程嗎?

  許多程序員都認爲創建SQL Server存儲過程不再必需T-SQL了。不幸的是(或者並非如此,這根據你的觀點),這並不全是事實。在技術上是可以在不了解T-SQL的情況下創建存儲過程的,但是沒有T-SQL的話則無法訪問任何的數據。

  在CLR存儲過程內部進行數據訪問,是通過使用標准的ADO.NET類來完成的。開發人員會在應用程序層發現很多同樣的沒有用處的數據訪問代碼,這些代碼會很輕易地轉移到SQLCLR例程中去。當中間層的這些ADO.NET類需要使用T-SQL來訪問數據的時候,在 CLR主機提供的環境中就會使用同樣的類。

  我要強調的是,從技術角度來說,不使用T-SQL來編寫存儲過程是可能的。那麽有沒有理由這麽做呢?一種情況就是這是一個用來從普通文件或者網絡服務中檢索數據的CLR存儲過程,並將數據格式設置爲行集。這裏可能就會用到不需要T-SQL的操作——但是這並不是對T -SQL存儲過程能力的一個很好的比喻。

  CLR存儲過程vs. T-SQL存儲過程

  CLR存儲過程和函數與T-SQL存儲過程和函數相比,性能如何?

  回答:

  這裏是用來比較T-SQL例程和CLR例程性能的一種常用的規則:用你的數據,在你的服務器上,測試兩套配置,看看哪一個比較好。

  就是說,許多人都運行過性能測試,一般的結果就是T-SQL在標准的CRUD(創建、讀取、更新、刪除)操作上表現要比好一點,而在複雜數學、字符串賦值和其他的超過數據訪問的任務上,則是CLR的性能表現更好一點。

  SQL Server 的專家Gustavo Larriera編輯了如下一些關于這個主題的有用鏈接:

  ·在 SQL Server 2005中使用CLR Integration。

  ·簡單介紹在 SQL Server 2005中的 CLR Integration。

  ·在 SQL Server 2005中對CLR 和T-SQL做出選擇。

  ·介紹 SQL Server 2005中的 CLR Integration。

  ·SQL Server 閑談: SQL Server 2005 Beta 2 CLR問題與回答。

  ·數據庫管理員的防禦.NET。

  ·用戶自定義函數的性能比較。

  如何在一個存儲過程中使用另一個存儲過程的結果?

  專家回答:

  只要存儲過程只産生了一個單個的結果,要在另外一個存儲過程中使用這個存儲過程産生的輸出,這個技術是非常直接的。這個技術就是使用一個臨時表來裝載存儲過程的巨額iguo,然後通過INSERT EXEC語句來執行這個過程並保存結果。一旦結果保留在臨時表中了,他們就可以像使用其它表數據一樣來使用它了。

  這裏是我們可能會複用的一個過程例子:

  CREATE PROC usp_Demo_AllAuthors as

  select * from pubs..authors

  GO

  現在有一個存儲過程使用usp_Demo_AllAuthors的結果:

  CREATE proc usp_Demo_SPUser as CREATE TABLE #Authors (

  au_id varchar(11) NOT NULL PRIMARY KEY CLUSTERED,

  au_lname varchar (40) NOT NULL ,

  au_fname varchar (20) NOT NULL ,

  phone char (12) NOT NULL,

  address varchar (40) NULL ,

  city varchar (20) NULL ,

  state char (2) NULL ,

  zip char (5) NULL ,

  contract bit NOT NULL

  )– Execute usp_Demo_AllAuthors storing the

  – results in #Authors

  insert into #Authors

  exec usp_Demo_AllAuthors– Here we use the #Authors table. This example only

  – only selects from the temp table but you could do much

  – more such as use a cursor on the table or join with

  – other data.

  SELECT au_fName + 『 『 + au_lname as [name]

  , address+』, 『+city+』, 『+state+』 『+zip [Addr]

  from #AuthorsDROP TABLE #Authors

  GO

  SQL Server 2005中的存儲過程並發問題

  我在SQL Server2005中遇到了並發問題。我持有車票的公共汽車上有一些空閑的座位。我在插入銷售的查票之前,需要查看是否還有空閑的座位。我的存儲過程做的事情如下所示:

  CREATE PROCEDURE add_ticket — parameters

  DECLARE free_seats int BEGIN TRANSACTION SELECT free_seats

  = COUNT(*) FROM tickets WHERE seat_is_not_taken IF free_seats

  <> 0 INSERT INTO tickets VALUES(…) — some other statements END TRANSACTION

  問題就是兩個過程可以同時讀取空閑票數,並且都可以預約一張票,即使是那裏已經沒有空余的了。我需要一種方法來防止一個過程在另一個過程運行add_ticket程序,但是還沒有插入一張新票的時候讀取空票的數量。

  回答:

  你是正確的;更高的隔離級別也不會保證多個讀者去同時去讀取同一個數據行。然而,還有幾種方法你可以完成這項工作。例如,你可以給每個座位分配一個惟一的標識符(意思是,惟一鍵——不一定是GUID),並且創建一個描述哪些座位已經被預訂了的表。在表上放一個 UNIQUE約束,你就可以確保同一個座位不會被插入兩次了。

  就是說,我認爲一個更有趣的方法就是使用SQL Service Broker。你可以爲每個公交建立一個會話,並且將這個會話的句柄存放在一個表中,讀者在執行RECEIVE之前可以參考這個表。通過這種方式,讀者就可以正確地過濾。公共汽車上的每個座位都插一個消息到隊列中。讀者就可以簡單地RECEIVE到所需的消息(在這個過程中,預定公共汽車上的座位)。 Service Broker會確保沒有消息會被接受兩次,也就是說你不會再遇到並發問題了。

  SQL Server 2005中取代了查詢分析器

  回答:

  你是對的。查詢分析器和企業管理器都從SQL Server中刪除了。取代它們的是一個工具,SQL Server 管理套件(SQL Server Management Studio)。這個工具具有前任的大多數特性,但是擁有升級後的用戶界面和很多經過改善的功能。我覺得大多數的數據庫管理員都會發現這是一個很好的升級。

  如果你想要了解更多有關SQL Server管理套件的新特性的信息,請閱讀SearchSQLServer.com 上有關這個話題的文章。

  SQL vs. T-SQL

  回答:

  SQL是結構化查詢語言,是ANSI/ISO 認可的標准數據庫語言。SQL Server的實現語言叫做Transact-SQL (T-SQL)。T-SQL基本上是根據1992年發表的ISO標准出現的,在1999年的標准上稍加修改。此外,微軟還進行了各種私有的加強。

  標准SQL和T-SQL之間有很多區別——太多了,這裏就不說了。還有,如果你在SQL Server上工作,那麽使用這些私有的擴展是有好處的。由于許多SQL Server的特性的本質,你不使用非標准的命令的話,將會有很多強大的功能無法實現。如果你想要看看你的SQL是否符合標准,你可以使用SET FIPS_FLAGGER命令。

  SQL Server 2005中是否有新的索引類別了?

  回答:

  SQL Server 2005沒有爲關系表引入新的索引類型。基本上——聚簇和非聚簇索引是以B-trees的方式實現的——還仍然在應用。然而,SQL Server 2005確實包含了一些索引上的加強,不論是完全文本索引,還是對于XML數據,此外這些加強還可以改善一些與關系型索引有關的問題。

  SQL Server 2005的完全文本索引特性是全新的,並且是重新編寫的。要獲得這個特性的信息,請閱讀Nimish Khanolkar的MSDN廣播文檔,介紹SQL Server 2005中的全文本查找。

  XML是SQL Server 2005中另外一個在方式上發生了巨大轉變的內容。現在對于開發人員來說有第一流的XML數據類型可用了。這個類型支持XQuery查詢語言,使用了這個類型的字段可以通過特殊格式的XML索引被索引到。要了解更多有關XML類型的信息,請查找MSDN 上的文章。

  還有各種各樣的有關T-SQL索引命令的加強。也許最令人感興趣的就是新的「在線」索引類型,它允許數據庫管理員在不需要把用戶鎖到表外面的情況下執行索引維護任務。這個很有可能標記著數據庫管理員需要等到夜裏3點才能打開維護窗口修正問題的狀況的終結!要了解更多有關這個特性的信息,請查找SQL Server Worldwide Users Group 上的文章。

  爲行選擇創建一個腳本

  想象一下這個表:

  prod_key item_key pack_key last_sale

  LM001 1029 AD100 2004/12/05

  LM870 1029 AD100 2005/09/20

  PE789 1030 BC400 2003/07/12

  PE312 1030 BC400 2004/08/07

  我想要選出哪些在item_key 和pack_key相等的情況下,日期比較大的那一行。換句話說,我想要:

  LM870 1029 AD100 2005/09/20

  PE312 1030 BC400 2004/08/07

  回答:

  這個表有主鍵嗎?那樣的話查詢可能會容易些。不管怎麽樣,我覺得你應該按照下面這樣:

  SELECT prod_key,item_key,pack_key,last_sale

  FROM (SELECT item_key,pack_key,MAX(last_sale)

  AS last_sale FROM tablex GROUP BY item_key,pack_key) AS MaxDateTable

  WHERE tablex.item_key = MaxDateTable.item_key

  AND tablex.pack_key = MaxDateTable.pack_key

  AND tablex.last_sale = MaxDateTable.last_sale

  列出沒有記錄的數據庫表

  我創建了一個動態的SQL Server查詢來輸出表中行的數量。我的目標是列出在數據庫中沒有記錄的表。查詢如下所示:

  declare @strsql varchar(100)

  declare @tablename varchar(50)

  @tablename=』table123′@strsql=』

  select count(*) from 『 + @tablename exec(@strsql)

  我得到了輸出,但是我無法把這個值存儲到變量中以備查看。

  B<>我想要這樣查看:

  /* @countvariable=0

  print(@tablename)*/

  還有其它的解決方法嗎?

  回答:

  你可以讓你的解決方案更加靈活一些,通過從sysobjects表中抓取表名:

  declare @strsql varchar(256)

  create table #emptytables

  (tablename varchar(128), table_rowcount int)select

  @strsql=』select distinct o.name as TableName,

  .rowcnt as Table_RowCount

  from sysobjects o

  inner join sysindexes x

  on o.id = x.id

  where x.rowcnt = 0 and

  o.type = 『』U」』insert #emptytables (TableName,

  Table_rowcount) exec (@strsql)

  select * from #emptytables

  drop table #emptytables
 
 
 
上一篇《SQL Server數據庫簡體繁體數據混用的問題》
下一篇《SQL Server數據庫查詢優化的常用方法總結》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
在SQL Server開發問題中你可能會問到的十個問題: 1、什麽是常見的對表和字段的名字約束? 2、有沒有可能在不了解T-SQL的情況下編寫存儲過程? 3、T-SQL 中如何比較CLR 存儲過程和函數的性能? 4、我如何在一個存儲過程中使用另一個存儲過程産生的結果? 5、我如何解決SQL Server 2005的並發問題? 6、在SQL Server 2005中用什麽工具替代了查詢分析器? 7、你能提供一些有關SQL 和T-SQL的詳細信息嗎? 8、SQL Server 2005 有沒有新的索引類型? 9、我如何創建一個腳本在表中進行選擇? 10、我如何列出那些沒有記錄的數據庫表? 對于表和字段的常見名字約束 回答: SQL Server 2000下的表和字段名稱有1到128字節的限制,並且遵循用于標識的規則。 第一個字母必須是如下的一種: · Unicode Standard 2.0中規定的字母。 Unicode對字母的定義包括:拉丁字母,從A到Z,除了來自其他語言的字母之外。 · 下劃線(_),at符號(@),或者數字符號(#) 在SQL Server中以這些符號作爲標識符的開始具有特殊的含義。一個以at符號(@)開頭的標識符表示一個本地的變量或者參數。一個以數字符號(#)開頭的標識符代表一個臨時表或者過程。一個以兩個數字符號(##)開頭的標識符標識的是一個全局臨時對象。 一些Transact-SQL函數的名字以兩個at符號(@@)開頭。爲了避免與這些函數混淆,推薦你不要使用兩個at符號(@@)開頭的標識符。 接下來的字母可以是以下的任意幾種: · Unicode Standard 2.0定義的字母 · 來自基礎拉丁文或者其他語音的十進制數字 · at符號(@),美元符號($),數字符號(#),或者下劃線 標識符絕對不能是Transact-SQL的保留字。SQL Server保留了一些大寫和小寫的保留字。內建的空間或者特殊的字母都不允許出現,盡管你可以在好的老版本的Northwind中看到它們包含了內建的空間。你必須通過把它們括在括號中才可以訪問。 不具有任何T-SQL知識的情況下編寫SQL Server2005存儲過程嗎? 許多程序員都認爲創建SQL Server存儲過程不再必需T-SQL了。不幸的是(或者並非如此,這根據你的觀點),這並不全是事實。在技術上是可以在不了解T-SQL的情況下創建存儲過程的,但是沒有T-SQL的話則無法訪問任何的數據。 在CLR存儲過程內部進行數據訪問,是通過使用標准的ADO.NET類來完成的。開發人員會在應用程序層發現很多同樣的沒有用處的數據訪問代碼,這些代碼會很輕易地轉移到SQLCLR例程中去。當中間層的這些ADO.NET類需要使用T-SQL來訪問數據的時候,在 CLR主機提供的環境中就會使用同樣的類。 我要強調的是,從技術角度來說,不使用T-SQL來編寫存儲過程是可能的。那麽有沒有理由這麽做呢?一種情況就是這是一個用來從普通文件或者網絡服務中檢索數據的CLR存儲過程,並將數據格式設置爲行集。這裏可能就會用到不需要T-SQL的操作——但是這並不是對T -SQL存儲過程能力的一個很好的比喻。 CLR存儲過程vs. T-SQL存儲過程 CLR存儲過程和函數與T-SQL存儲過程和函數相比,性能如何? 回答: 這裏是用來比較T-SQL例程和CLR例程性能的一種常用的規則:用你的數據,在你的服務器上,測試兩套配置,看看哪一個比較好。 就是說,許多人都運行過性能測試,一般的結果就是T-SQL在標准的CRUD(創建、讀取、更新、刪除)操作上表現要比好一點,而在複雜數學、字符串賦值和其他的超過數據訪問的任務上,則是CLR的性能表現更好一點。 SQL Server 的專家Gustavo Larriera編輯了如下一些關于這個主題的有用鏈接: ·在 SQL Server 2005中使用CLR Integration。 ·簡單介紹在 SQL Server 2005中的 CLR Integration。 ·在 SQL Server 2005中對CLR 和T-SQL做出選擇。 ·介紹 SQL Server 2005中的 CLR Integration。 ·SQL Server 閑談: SQL Server 2005 Beta 2 CLR問題與回答。 ·數據庫管理員的防禦.NET。 ·用戶自定義函數的性能比較。 如何在一個存儲過程中使用另一個存儲過程的結果? 專家回答: 只要存儲過程只産生了一個單個的結果,要在另外一個存儲過程中使用這個存儲過程産生的輸出,這個技術是非常直接的。這個技術就是使用一個臨時表來裝載存儲過程的巨額iguo,然後通過INSERT EXEC語句來執行這個過程並保存結果。一旦結果保留在臨時表中了,他們就可以像使用其它表數據一樣來使用它了。 這裏是我們可能會複用的一個過程例子: CREATE PROC usp_Demo_AllAuthors as select * from pubs..authors GO 現在有一個存儲過程使用usp_Demo_AllAuthors的結果: CREATE proc usp_Demo_SPUser as CREATE TABLE #Authors ( au_id varchar(11) NOT NULL PRIMARY KEY CLUSTERED, au_lname varchar (40) NOT NULL , au_fname varchar (20) NOT NULL , phone char (12) NOT NULL, address varchar (40) NULL , city varchar (20) NULL , state char (2) NULL , zip char (5) NULL , contract bit NOT NULL )– Execute usp_Demo_AllAuthors storing the – results in #Authors insert into #Authors exec usp_Demo_AllAuthors– Here we use the #Authors table. This example only – only selects from the temp table but you could do much – more such as use a cursor on the table or join with – other data. SELECT au_fName + 『 『 + au_lname as [name] , address+』, 『+city+』, 『+state+』 『+zip [Addr] from #AuthorsDROP TABLE #Authors GO SQL Server 2005中的存儲過程並發問題 我在SQL Server2005中遇到了並發問題。我持有車票的公共汽車上有一些空閑的座位。我在插入銷售的查票之前,需要查看是否還有空閑的座位。我的存儲過程做的事情如下所示: CREATE PROCEDURE add_ticket — parameters DECLARE free_seats int BEGIN TRANSACTION SELECT free_seats = COUNT(*) FROM tickets WHERE seat_is_not_taken IF free_seats <> 0 INSERT INTO tickets VALUES(…) — some other statements END TRANSACTION 問題就是兩個過程可以同時讀取空閑票數,並且都可以預約一張票,即使是那裏已經沒有空余的了。我需要一種方法來防止一個過程在另一個過程運行add_ticket程序,但是還沒有插入一張新票的時候讀取空票的數量。 回答: 你是正確的;更高的隔離級別也不會保證多個讀者去同時去讀取同一個數據行。然而,還有幾種方法你可以完成這項工作。例如,你可以給每個座位分配一個惟一的標識符(意思是,惟一鍵——不一定是GUID),並且創建一個描述哪些座位已經被預訂了的表。在表上放一個 UNIQUE約束,你就可以確保同一個座位不會被插入兩次了。 就是說,我認爲一個更有趣的方法就是使用SQL Service Broker。你可以爲每個公交建立一個會話,並且將這個會話的句柄存放在一個表中,讀者在執行RECEIVE之前可以參考這個表。通過這種方式,讀者就可以正確地過濾。公共汽車上的每個座位都插一個消息到隊列中。讀者就可以簡單地RECEIVE到所需的消息(在這個過程中,預定公共汽車上的座位)。 Service Broker會確保沒有消息會被接受兩次,也就是說你不會再遇到並發問題了。 SQL Server 2005中取代了查詢分析器 回答: 你是對的。查詢分析器和企業管理器都從SQL Server中刪除了。取代它們的是一個工具,SQL Server 管理套件(SQL Server Management Studio)。這個工具具有前任的大多數特性,但是擁有升級後的用戶界面和很多經過改善的功能。我覺得大多數的數據庫管理員都會發現這是一個很好的升級。 如果你想要了解更多有關SQL Server管理套件的新特性的信息,請閱讀SearchSQLServer.com 上有關這個話題的文章。 SQL vs. T-SQL 回答: SQL是結構化查詢語言,是ANSI/ISO 認可的標准數據庫語言。SQL Server的實現語言叫做Transact-SQL (T-SQL)。T-SQL基本上是根據1992年發表的ISO標准出現的,在1999年的標准上稍加修改。此外,微軟還進行了各種私有的加強。 標准SQL和T-SQL之間有很多區別——太多了,這裏就不說了。還有,如果你在SQL Server上工作,那麽使用這些私有的擴展是有好處的。由于許多SQL Server的特性的本質,你不使用非標准的命令的話,將會有很多強大的功能無法實現。如果你想要看看你的SQL是否符合標准,你可以使用SET FIPS_FLAGGER命令。 SQL Server 2005中是否有新的索引類別了? 回答: SQL Server 2005沒有爲關系表引入新的索引類型。基本上——聚簇和非聚簇索引是以B-trees的方式實現的——還仍然在應用。然而,SQL Server 2005確實包含了一些索引上的加強,不論是完全文本索引,還是對于XML數據,此外這些加強還可以改善一些與關系型索引有關的問題。 SQL Server 2005的完全文本索引特性是全新的,並且是重新編寫的。要獲得這個特性的信息,請閱讀Nimish Khanolkar的MSDN廣播文檔,介紹SQL Server 2005中的全文本查找。 XML是SQL Server 2005中另外一個在方式上發生了巨大轉變的內容。現在對于開發人員來說有第一流的XML數據類型可用了。這個類型支持XQuery查詢語言,使用了這個類型的字段可以通過特殊格式的XML索引被索引到。要了解更多有關XML類型的信息,請查找MSDN 上的文章。 還有各種各樣的有關T-SQL索引命令的加強。也許最令人感興趣的就是新的「在線」索引類型,它允許數據庫管理員在不需要把用戶鎖到表外面的情況下執行索引維護任務。這個很有可能標記著數據庫管理員需要等到夜裏3點才能打開維護窗口修正問題的狀況的終結!要了解更多有關這個特性的信息,請查找SQL Server Worldwide Users Group 上的文章。 爲行選擇創建一個腳本 想象一下這個表: prod_key item_key pack_key last_sale LM001 1029 AD100 2004/12/05 LM870 1029 AD100 2005/09/20 PE789 1030 BC400 2003/07/12 PE312 1030 BC400 2004/08/07 我想要選出哪些在item_key 和pack_key相等的情況下,日期比較大的那一行。換句話說,我想要: LM870 1029 AD100 2005/09/20 PE312 1030 BC400 2004/08/07 回答: 這個表有主鍵嗎?那樣的話查詢可能會容易些。不管怎麽樣,我覺得你應該按照下面這樣: SELECT prod_key,item_key,pack_key,last_sale FROM (SELECT item_key,pack_key,MAX(last_sale) AS last_sale FROM tablex GROUP BY item_key,pack_key) AS MaxDateTable WHERE tablex.item_key = MaxDateTable.item_key AND tablex.pack_key = MaxDateTable.pack_key AND tablex.last_sale = MaxDateTable.last_sale 列出沒有記錄的數據庫表 我創建了一個動態的SQL Server查詢來輸出表中行的數量。我的目標是列出在數據庫中沒有記錄的表。查詢如下所示: declare @strsql varchar(100) declare @tablename varchar(50) @tablename=』table123′@strsql=』 select count(*) from 『 + @tablename exec(@strsql) 我得到了輸出,但是我無法把這個值存儲到變量中以備查看。 B<>我想要這樣查看: /* @countvariable=0 print(@tablename)*/ 還有其它的解決方法嗎? 回答: 你可以讓你的解決方案更加靈活一些,通過從sysobjects表中抓取表名: declare @strsql varchar(256) create table #emptytables (tablename varchar(128), table_rowcount int)select @strsql=』select distinct o.name as TableName, .rowcnt as Table_RowCount from sysobjects o inner join sysindexes x on o.id = x.id where x.rowcnt = 0 and o.type = 『』U」』insert #emptytables (TableName, Table_rowcount) exec (@strsql) select * from #emptytables drop table #emptytables
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
成熟風韻的Meinv
甜美少女
此女子姿色過人也
愛恨情愁傷哀怨
痞子的甘南日記
疑是銀河落九天
雪域壩上四——純美色
冬日戀歌——西城楊柳弄輕柔
 
>>返回首頁<<
 熱帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号 wangchaonetcn
 
© 2005- 王朝網路 版權所有