小编Die*_*ego的帖子

在 SSIS 导入期间暂停表约束

我正在尝试通过导入/导出向导从生产数据库中播种一个空白数据库。如何说服 SQL Server 忽略外键违规?

谢谢

sql ssis sql-server-2008

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

INSERT INTO SELECT - 大量记录

我想将记录插入TempTable.像这样的东西:

insert into ##tempT
SELECT * FROM MyTable 
Run Code Online (Sandbox Code Playgroud)

MyTable包含大量记录,因此"插入"需要很长时间.

如果我尝试运行:

SELECT COUNT(*) FROM ##tempT
Run Code Online (Sandbox Code Playgroud)

它返回始终为"0",直到INSERT INTO命令插入"MyTable"的所有记录.

如何获得一个进度计数,告诉我## tempT中有多少记录?

我需要在SQL命令运行时更新进度条值.

谢谢.

sql t-sql sql-server insert

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

ORA-08103程序错误

我在Oracle上有一个程序,如果我使用这段代码从SQL Developer调用它,它就可以正常工作:

VARIABLE x REFCURSOR
exec MY_PROCEDURE('par1', 'par2', 'par3', 'par4' ,:x);
PRINT x;
Run Code Online (Sandbox Code Playgroud)

如果我尝试从我的.Net应用程序(使用ODP.NET)调用它,我收到错误:

Oracle.DataAccess.Client.OracleException ORA-08103: object no longer exists
Run Code Online (Sandbox Code Playgroud)

这是我用来调用它的代码:

OracleConnection con = new OracleConnection();
con.ConnectionString = dbConnectionString; //string with the connectio. It is fine because I can connect

OracleCommand cmd = new OracleCommand("MY_PROCEDURE", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;

cmd.Parameters.Add(new OracleParameter("par1", OracleDbType.Varchar2)).Value = var1;
cmd.Parameters.Add(new OracleParameter("par2", OracleDbType.Varchar2)).Value = var2;
cmd.Parameters.Add(new OracleParameter("par3", OracleDbType.Varchar2)).Value = var3;
cmd.Parameters.Add(new OracleParameter("par4", OracleDbType.Varchar2)).Value = var4;

OracleParameter ref_cursor = new OracleParameter();
ref_cursor.OracleDbType = OracleDbType.RefCursor; …
Run Code Online (Sandbox Code Playgroud)

c# oracle stored-procedures odp.net

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

使用可能不存在的数据库

我有一个带有USE DATABASE声明的脚本。如果数据库存在,脚本运行得很好。如果它不存在,它会失败并显示“数据库不存在”的消息,这是完全有道理的。

现在,我不会失败,所以我添加了一个检查来选择 sys.databases 上是否存在 DB(IF 1=2为了简单起见,我将在此处用检查表示),因此,如果 DB 存在 (1=1 ),然后运行“use”语句。

令我惊讶的是,脚本一直失败。所以我尝试添加一个 TRY CATCH 块。结果一样。似乎 use 语句在其他任何事情之前进行评估,这很烦人,因为现在我的脚本可能会中断。

所以我的问题是:我怎样才能use对可能不存在的数据库的脚本进行声明?

BEGIN TRY
   IF (1=1) BEGIN --if DB exists
    USE DB_THAT_MAY_NOT_EXIST
   END 
END TRY
BEGIN CATCH
END CATCH
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2

5
推荐指数
2
解决办法
3658
查看次数

R 舍入数字

快速提问,为什么 R 舍入我的“a”值?

> a<--2267046163.857410
> a
[1] -2267046164
> b<- 0.00050025
> b
[1] 0.00050025
Run Code Online (Sandbox Code Playgroud)

“b”看起来不错,但 a 被四舍五入,这给我带来了问题,因为我将 a 乘以 b 并得到

> a*b
[1] -1134090
Run Code Online (Sandbox Code Playgroud)

我期望得到 -1134089.843

谢谢

r

5
推荐指数
0
解决办法
97
查看次数

LAG功能和NULLS

如何告诉LAG函数获取最后一个"非空"值?

例如,请参阅下面的表格,我在列B和C上有一些NULL值.我想用最后一个非空值填充空值.我试图通过使用LAG函数来做到这一点,如下所示:

case when B is null then lag (B) over (order by idx) else B end as B,
Run Code Online (Sandbox Code Playgroud)

但是当我连续有两个或多个空值时,这并不常用(参见C列第3行的NULL值 - 我希望它是原始的0.50).

任何想法我怎么能实现这一目标?(它不必使用LAG功能,欢迎任何其他想法)

一些假设:

  • 行数是动态的;
  • 第一个值将始终为非null;
  • 一旦我有一个NULL,就是NULL一直到最后 - 所以我想用最新的值填充它.

谢谢

在此输入图像描述

sql t-sql sql-server sql-server-2016

5
推荐指数
2
解决办法
4330
查看次数

禁用锁升级的缺点

我有一个名为 MyFactTable 的表,如下所示:

Create table MyFactTable
(
RunID int,
Key2 int,
Key3 int,
Key4 int,
….
Value2 numeric,
Value3 numeric,
Value4 numeric,
….
)
Run Code Online (Sandbox Code Playgroud)

它也有:

  • RunID 上的非唯一聚集索引(非唯一,因为 RunID 可以有数十万行与之关联);
  • 一些其他的非聚集索引来帮助查询;

运行 ID 彼此完全隔离,通常我会将多个进程插入到此表中(显然具有不同的运行 ID)。问题是我似乎无法并行运行插入,这意味着当进程 A 插入表时,进程 B 也被阻止这样做。

在 95% 的情况下,这不是什么大问题,因为大多数 RunID 非常小(少于 50 万行),它们只会锁定表几秒钟,但最终会产生更大的工作(20+ 百万行) ) 启动并锁定表几分钟,阻止所有较小的进程完成。

我想这是因为第一个尝试插入表的进程正在获取一个表锁,所以我用这个命令禁用了锁升级:

ALTER TABLE MyFactTable  SET (LOCK_ESCALATION=DISABLE)
Run Code Online (Sandbox Code Playgroud)

那确实解决了问题,但现在我想知道这样做的后果是什么。

有没有人遇到过这样的情况并愿意分享他们的经验。

其次,我可以采用哪些其他可能的解决方案?我想过对表进行分区并将所有小运行放在一个分区中,将所有大运行放在另一个分区中(我不在乎大的是否阻塞自己,我只是想确保小的不会被大的)。你怎么看?

我想值得一提的是,这个表永远不会更新,一旦插入了 RunID,它只会被查询(因此不会再插入具有相同 RunID 的内容),最终它会被清理过程删除。

谢谢,迭戈

sql sql-server locking sql-server-2014

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

具有张量流的CUDA版本

我试图在我的Windows 10笔记本电脑上安装带有GPU的tensorflow.我已经下载了cuda(版本9,因为它是最新的版本)并且因为dll cudart64_80.dll不存在而有问题.我确实cudart64_90.dll让我相信张量流只适用于cuda 8.

我想知道我是否应该unisntall CUDA 9然后安装CUDA 8或者我是否可以安装两个版本?

python tensorflow

5
推荐指数
0
解决办法
3285
查看次数

倒置选择TOP*

你知道什么时候你有这么大的日志表,你只需要查看最后的X行,知道当时发生了什么?

通常你可以这样做:

select top 100 * 
from log_table
order by ID desc
Run Code Online (Sandbox Code Playgroud)

显示100个最新记录,但它将按逆序(当然,因为DESC的顺序),例如:

100010
100009
100008
and so on..
Run Code Online (Sandbox Code Playgroud)

但为了简单起见,我希望看到他们发生的订单记录.我可以通过运行此查询来做到这一点:

select * 
from(
    select top 100 * from log_table order by ID desc
    ) a
order by a.id
Run Code Online (Sandbox Code Playgroud)

我通过ID desc得到我的前100个订单,然后反转结果集.它工作但似乎没有必要运行2选择产生这个结果.

我的问题是:有没有人有更好的想法呢?就像桌子末尾的精选顶部一样?

编辑:两个查询的执行计划:似乎亚历克斯的想法非常好,但大卫也是对的,只有一个选择和一种 在此输入图像描述

EDIT2:设置统计IO ON:

(10 row(s) affected)
Table 'sysdtslog90'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 12, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

(10 row(s) affected)
Table …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 sql-server-2008

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

按动态列名过滤数据表

假设我有一个包含A,B和C列的data.table

我想写一个应用过滤器的函数(例如A> 1)但是"A"需要是动态的(函数的参数)所以如果我通知A,它会做A> 1; 如果我通知B,它会B> 1,依此类推......(A和B总是列名称,当然)

示例:假设我的数据如下,我想做"A == 1"并返回绿线,或执行"B == 1&C == 1"并返回蓝线.

在此输入图像描述

可以这样做吗?谢谢

r dataframe data.table

4
推荐指数
3
解决办法
5194
查看次数