主要講 except 和 not in 的效能上的區別。 複製代碼 代碼如下: CREATE TABLE tb1(ID int) CREATE TABLE tb2(ID int) BEGIN TRAN DECLARE @i INT = 500 WHILE @i > 0 begin INSERT INTO dbo.tb1 VALUES ( @i -- v - int ) SET @i = @i -1 end COMMIT我測試的時候tb1 是1000,tb2 是500 複製代碼 代碼如下:
有兩個結構完全相同的表,由其中一個表插入另一個表中指定條件的資料,報如下錯誤: 僅當使用了列列表並且 IDENTITY_INSERT 為 ON 時,才能為表'*'中的識別欄位指定顯式值。 在網上找到瞭解決方案,親自試過,可以解決。 方法: 複製代碼 代碼如下: SET IDENTITY_INSERT test ON insert into test(id,name) select id,name from test2 --<SPAN style="FONT-SIZE: 14px;
複製代碼 代碼如下: use tempdb if object_id('tempdb..#table') is not null drop table tempdb..#table select name into tempdb..#table from (select * from sysobjects where xtype='U') a where a.name like '%test_select' declare @table varchar(100),@count int
得到執行計畫的方式有兩種: 1、一種是在指令的前面開啟一些開關,讓執行計畫資訊打在結果集裡,這種方法比較適合在一個測試環境裡對單個語句調優。 這些開關最常用的有 複製代碼 代碼如下: SET SHOWPLAN_ALL ON SET SHOWPLAN_ALL ON --(是不是reuse了一個執行計畫,SQSERVERL有沒有覺得缺少索引),只能在XML的輸出裡看到 SET STATISTICS PROFILE ON 還有如果使用SSMS的話,可以用快速鍵:Ctrl+L 小寫L
誤區 #2: DBCC CHECKDB會引起阻塞,因為這個命令預設會加鎖這是錯誤的! 在SQL Server 7.0以及之前的版本中,DBCC CHECKDB命令的本質是C語言實現的一個不斷嵌套迴圈的代碼並對錶加表鎖(迴圈嵌套演算法時間複雜度是嵌套次數的N次方,作為程式員的你懂得),這種方式並不和諧,並且….. 在SQL Server 2000時代,一個叫Steve Lindell的哥們(現在仍然在SQL Server
複製代碼 代碼如下: CREATE function getcolor (@井號 varchar(50),@層位 varchar(50)) returns varchar(200) as begin declare @sql varchar(2000);set @sql='' --distinct select @sql=@sql+ 顏色+',' from ( select distinct 顏色 from yourtablename where 井號=@井號 and 層位=@層位 and