程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLserver2000分頁另類解決方法

SQLserver2000分頁另類解決方法

編輯:關於SqlServer

我們在存儲過程分頁中大都會用到這樣的語句
SELECT *,row_number() OVER(ORDER BY id DESC) AS rowNumber FROM
但是SQL2000 中不支持row_number() 需要使用 select ....into 配合臨時表和
IDENTITY (data_type [ , seed , increment ] ) AS column_name  來作為替代方案。
語句像下面這樣
SELECT *,identity(int,1,1) as rowNumber INTO #temp FROM  Article
但是如果 Article中有標識列的話就會報錯。
無法使用 SELECT INTO 語句將標識列添加到表 ?? 該表的列 ?? 已繼承了標識屬性。
網上找到大多數解決方案都是需要顯示指定源表的列的列表。
一般是使用Convert(int,identity_columnName) 或者使用SET IDENTITY_INSERT指令
這樣雖然可以解決問題但是不夠通用,而且但源表主鍵列名未知的情況下就無能為力了。
經過反復的百度和GOOGLE查閱相關資料後發現可以把上面的語句寫成下面這樣:
SELECT *,identity(int,1,1) as rowNumber INTO
#temp FROM (SELECT * FROM Article) AS newArticle
或則

SELECT T1.*,IDENTITY(INT,1,1)AS rowNumber INTO #temp FROM
 Article AS T1 JOIN Article AS T2 ON 1=2

這樣就不會報錯了。

 另外通過INSERT INTO #temp exec('SELECT * FROM Product')可以把動態構造的SQL插入到#temp 中

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved