我即将将存储过程从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