需要将以下存储过程从 Oracle 转换为 SQL
Posted
技术标签:
【中文标题】需要将以下存储过程从 Oracle 转换为 SQL【英文标题】:Need to convert below stored procedure from Oracle to SQL 【发布时间】:2018-07-19 08:10:06 【问题描述】:我需要将下面的存储过程从 Oracle 转换为 SQL,我尝试通过 SqlSever 迁移助手进行转换,但无法转换动态查询。我还需要知道如何更改序列并获取 nextval:
create or replace
procedure dep_reset_seq( p_seq_name in varchar2,p_Start_value integer )
is
l_val number;
begin
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by -' || l_val ||
' minvalue ' || p_Start_value;
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by 1 minvalue ' || p_Start_value;
end;
【问题讨论】:
据我所知,SQL Server(M$SQL Server,因为Oracle也是SQL Server)是没有序列概念的。它改为使用 AutoIdentity 字段。 这和 C# 有什么关系?无论如何,SO 不是代码翻译服务。分享您已经尝试过的内容以及您遇到的问题。 @nabuchodonossor - 从 SQL Server 2012 开始,支持序列。 @andrew:谢谢,不知道,发现是从 2012 年开始的 :-( 好久不见了.. 我想知道的:为什么要以这种方式使用序列?获取下一个值,并使用新的起始值重新创建序列? 【参考方案1】:SQL Server 从 2012 开始支持序列,有一个改变序列命令:https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-sequence-transact-sql?view=sql-server-2017 改变序列的命令格式与Oracle非常相似。
获取下一个值是一种不同格式的命令,使用NEXT VALUE
构造访问。
https://docs.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql?view=sql-server-2017
这些概念中的每一个都很容易搜索,并且现有的文档非常全面 - 那么您遇到了更具体的问题吗?
【讨论】:
以上是关于需要将以下存储过程从 Oracle 转换为 SQL的主要内容,如果未能解决你的问题,请参考以下文章
将引用集合表的过程从 Oracle 转换为 Postgresql 时出错
从 ASP.NET 调用 Oracle 存储过程时,无法将“System.Int32[]”类型的对象转换为“System.IConvertible”类型