我即將將存儲過程從pl/sql轉換爲SQL Server。該過程使用遊標循環查詢select
的結果。是否存在與ORACLE rowtype
構造相同的SQL Server?%SQL Server中的Rowtype等效項目
回答
使用遊標的SQL方法如下所示
DECLARE @colA varchar(50), @colB varchar(50)
DECLARE myCursor CURSOR FOR
Select columnA, columnB From table
OPEN myCursor
FETCH NEXT FROM myCursor INTO @colA, @colB
WHILE @@FETCH_STATUS = 0
BEGIN
--do something with @colA and @colB
FETCH NEXT FROM myCursor INTO @colA, @colB
END
CLOSE myCursor
DEALLOCATE myCursor
而且速度很慢。儘可能避免光標 - 這意味着重寫sp;) – TomTom 2010-10-26 09:57:00
速度不是問題。該過程將在系統處於脫機狀態時每晚執行。 – 2010-10-26 10:01:56
我想避免宣佈這麼多的變量,因爲表中有超過40個字段... – 2010-10-26 10:59:56
這是一個巨大的原因相比,甲骨文的時候不喜歡的SQL Server。
我很失望SS沒有%TYPE和%ROWTYPE。這樣可以在最初編寫代碼時節省數小時的工作時間,並且在列的類型需要更改的情況下,無需返回並重新處理所有代碼。
在Oracle我以前寫的東西,如:
DECLARE @MyRowVar AS ATable%ROWTYPE;
在SQL Server中,我不得不寫這本:
DECLARE @External_ID AS BIGINT = NULL;
DECLARE @PlatformID AS INT = NULL;
DECLARE @ActorIDOfReseller AS INT = NULL;
DECLARE @ActorIDOfClient AS INT = NULL;
DECLARE @ActorIDOfExtension AS INT = NULL;
DECLARE @CallType AS NCHAR (10) = NULL;
DECLARE @CallInitiatedDate AS DATE = NULL;
DECLARE @CallInitiatedTimeHH24MI AS TIME (0) = NULL;
DECLARE @TimePeriodID AS INT = NULL;
DECLARE @CallAnswered AS DATETIME = NULL;
DECLARE @CallAnsweredYN AS BIT = NULL;
DECLARE @CallDispositionID AS INT = NULL;
DECLARE @CountryID AS INT = NULL;
DECLARE @CallPrefixID AS INT = NULL;
DECLARE @FromNumber AS VARCHAR (32) = NULL;
DECLARE @ToNumber AS VARCHAR (80) = NULL;
DECLARE @CallDuration AS INT = NULL;
DECLARE @CallCostToExtension AS DECIMAL (10, 6) = NULL;
DECLARE @CallCostToClient AS DECIMAL (10, 6) = NULL;
DECLARE @CallCostToReseller AS DECIMAL (10, 6) = NULL;
DECLARE @CallCostToAdmin AS DECIMAL (10, 6) = NULL;
DECLARE @Flow AS VARCHAR (3) = NULL;
DECLARE @CallStart AS DATETIME = NULL;
DECLARE @MoneyUnit AS VARCHAR (32) = NULL;
DECLARE @Prefix AS VARCHAR (32) = NULL;
DECLARE @External_CallID AS VARCHAR (255) = NULL;
這讓我很傷心。
哈維
- 1. sql server中的XMLAGG等效
- 2. 什麼是SQL Server的NoSQL等效項目
- 3. SQL Server等效的Oracle dbms_job.submit
- 4. silverlight項目中automapper的等效項目
- 5. SQL Server中是否有等效的SQL_CALC_FOUND_ROWS?
- 6. SQL Server中的MySQL \ G等效
- 7. 在SQL Server中等效的DBMS_SESSION.set_client_identifier
- 8. 識別SQL Server中的等效集
- 9. 在sql server中等效的Oracle varchar2
- 10. SQL-Server與MySQL等效
- 11. SQL Server 2008 CrossTab等效
- 12. OUTFILE Microsoft SQL Server等效?
- 13. 在MySQL中是否存在SQL Server的@@錯誤的等效項
- 14. VS2012中的SQL Server項目
- 15. 什麼是MS SQL Server中的「插入IGNORE」等效項?
- 16. pl/sql中的ROWTYPE定義
- 17. 的SQL Server等效的Oracle REGEXP_LIKE的
- 18. 目標C中的charCodeAt的等效項
- 19. SQL Server:任何等效的strpos()?
- 20. Oracle 10g的SQL Server跟蹤等效嗎?
- 21. MS SQL Server等效於PostgreSQL的EXPLAIN
- 22. 什麼是此Oracle查詢的SQL Server等效項?
- 23. SQL Server 2008中SQL Server 2008 R2中dm_os_volume_stats的等效物是什麼?
- 24. SQL Server:刪除表級聯等效?
- 25. TeraData日期函數與SQL Server等效
- 26. 如何將SQL Server光標轉換爲MySQL等效項
- 27. MySql等價的Sql Server數據庫項目
- 28. MySQL中的timestampdiff()等效於SQL Server中的datediff()嗎?
- 29. 部署C# - SQL Server項目
- 30. 如何在Access 2010中編寫SQL Server 2008等效查詢SQL
如果你可以在這裏拋出一些詳細信息,我們也許能幫助你避免光標都在一起,我只是傾向於引導遠離舊「不這樣做的」類型的答案:) – keith 2010-10-27 00:04:35