小编ber*_*d_k的帖子

将 SQL Server 整数映射到 Oracle 数据类型

我知道,SQL Server 整数最好用 NUMBER(10) 表示。

但有时我已经将一些维护脚本迁移到 Oracle,我想知道我是否必须小心地将整数映射到 NUMBER(10) 或者我是否可以在 Oracle 中使用 ansi 类型整数。

有什么理由不使用整数吗?

编辑:

我对 10g 进行了验证。

create table BK_int_test(
i_col integer,
f_col float);

insert into BK_int_test values (1, 1);
insert into BK_int_test values (1.1, 1.1);

Select * from BK_int_test;
Run Code Online (Sandbox Code Playgroud)

并得到

     I_COL      F_COL
---------- ----------
         1          1
         1        1,1

2 rows selected.
Run Code Online (Sandbox Code Playgroud)

谢谢,节省了很多工作。

短格式intinteger支持,以及。

oracle sql-server datatypes

3
推荐指数
1
解决办法
1462
查看次数

SQL Server 2008 是否可以使用带有标识列的分区表?

我不考虑将它用于分区功能。我只想知道,是否支持。

不要告诉我为什么在分区表上使用这样的列不是一个好主意。

sql-server-2008 partitioning

3
推荐指数
1
解决办法
3817
查看次数

如何将 SQL Server 兼容级别查询到变量中?

我知道要查询数据库的当前兼容级别

declare @dbname sysname
select @dbname = db_name(0)
exec sp_dbcmptlevel @dbname
Run Code Online (Sandbox Code Playgroud)

但这似乎通过打印返回其结果,我发现无法将值分配给变量并使用它来控制 if ... else ... 构造以根据当前设置执行不同的代码。

sql-server compatibility-level

3
推荐指数
1
解决办法
7828
查看次数

可以在数据库级别设置 IMPLICIT_TRANSACTIONS 吗?

当我必须调查由 IMPLICIT_TRANSACTIONS ON 引起的问题时,我可以专注于客户端工具设置 IMPLICIT_TRANSACTIONS ON 或 ANSI_DEFAULTS ON 还是可以针对影响所有客户端的整个数据库进行设置?

我可以通过将标准脚本头更改为来避免该问题

SET ANSI_DEFAULTS ON
SET IMPLICIT_TRANSACTIONS  OFF
Run Code Online (Sandbox Code Playgroud)

但是这个设置会在哪些级别的会话、数据库、服务器上受到影响呢?

编辑:

在msdn中找到了这个

似乎可以在服务器级别进行设置。

在“服务器属性”对话框(“连接”页面)中,我发现选项已更改并编写了脚本:

隐式交易:

EXEC sys.sp_configure N'user options', N'2'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)

隐式交易关闭:

EXEC sys.sp_configure N'user options', N'0'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)

但执行

exec('dbcc useroptions')
Run Code Online (Sandbox Code Playgroud)

SSMS中没有反映变化。对于此类连接,服务器设置似乎以某种方式被覆盖。

现在我必须重新提出这个问题,

是否有客户端不会覆盖服务器设置,并且在服务器设置更改时可能会崩溃。

sql-server-2008 sql-server

2
推荐指数
1
解决办法
1588
查看次数

加入标量函数的结果导致的性能问题?

在以下示例中,仅使用一个 SQL 查询的第一个版本的性能非常差。问题是最后一次加入。

当我将左侧的结果存储到一个临时表中并加入它时,它的运行速度大约快了 50 倍。

它旨在将其转换为 Oracle,因此我尽量避免使用临时表。

任何解释,为什么第一个查询表现如此糟糕或暗示改进它?

Declare @HO int = 2866;
Declare @Dtz int = 35;

---- version 1 takes about 60 seconds
With ratings as
(
    select
        ROW_NUMBER() Over ( ORDER BY SEDate) lfd, 
        SEDate, 
        BBCode 
    from  PPV
        join BB on BBRefnr = SEBBRefnr
    where SEHORefnr = @HORefnr 
    and SEBBRefnr > 0
)
Select
    SEDATE,
    BBCODE,
    Code,
    DTRefnr
FROM (  
Select 
    l.SEDate,
    l.BBCode,
    dbo.GetCode(@Dtz, l.BBCode) Code
from ratings l left join ratings r on l.lfd = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 temporary-tables

1
推荐指数
1
解决办法
628
查看次数

我可以在 Oracle 中实现“无缝”标识列吗?

在 SQL Server 中很容易编写:

create table #tmp (
    id      integer identity(1,1) primary key,
    message varchar(256)
);
Run Code Online (Sandbox Code Playgroud)

当我尝试将其迁移到 Oracle 时,我最终得到:

CREATE GLOBAL TEMPORARY TABLE tmp(
    id integer primary key,
    message varchar2(256)
) ON COMMIT PRESERVE ROWS;

CREATE SEQUENCE S_TMP_ID START WITH 1;

CREATE OR REPLACE TRIGGER TR_TMP 
BEFORE INSERT ON tmp
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
  SELECT S_TMP_ID.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/
Run Code Online (Sandbox Code Playgroud)

好的。我得到了独特的、不断增加的 id 值。但是,当两个会话同时使用同一个全局临时表时,我的想法序列就会出现差距,并且它们以某个任意值开始。

任何想法如何为全局临时表创建更好的标识值?

oracle identity

1
推荐指数
1
解决办法
2031
查看次数

是 where x = 0 或 x is null 被替换为 where isnull(x, 0) = 0 resp。其中 NVL(x, 0) = 0

将 x 视为包含 null、0、1 的列。只有不到 1% 的行包含 1。0 和 Null 之间没有逻辑差异。

坚持在这里使用 isnull 而不是 NVL 是个好主意吗(性能)?

null oracle sql-server

0
推荐指数
1
解决办法
1311
查看次数