电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:6日期:2023-11-06 08:59:51

在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沒有為關系表引入新的索引類型?;旧稀鄞睾头蔷鄞厮饕且訠-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 數據庫
主站蜘蛛池模板: 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 苏州西朗门业-欧盟CE|莱茵UL双认证的快速卷帘门品牌厂家 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 搪玻璃冷凝器_厂家-越宏化工设备| 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 涡轮流量计_LWGY智能气体液体电池供电计量表-金湖凯铭仪表有限公司 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 山东艾德实业有限公司| PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 北京京云律师事务所| 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格]| 钛板_钛管_钛棒_钛盘管-无锡市盛钛科技有限公司 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 |