小编Way*_*rad的帖子

根据第二个表中的多列值删除一个表中的记录

我需要根据表2中多列的数据插入和删除表1中的记录。

示例:表 1 和表 2 具有相同的列:地址、城市、州和邮编。

表 1 是具有数百万条记录的主表。表 2(千条记录)是基于以某种方式更改的数据的表 - 尽管它可能不是此表中的数据更改。

匹配记录意味着地址、城市、州和邮政编码在两个表中的值相同。

所以我想做两个操作:

  • 将只存在于表2中的记录插入到表1中
  • 从表1中删除记录不在表2中但城市在表2中的记录

根据 Table1 的大小,我需要一种非常有效的方法来执行此操作。我知道一些 SQL - 但没有达到如果使用 SQL 完成所需的级别。

这是一个 DB2 数据库 - 版本 10.5。

db2

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

在 sqlplus 中使用事务

我从 postgresql 来到 oracle。在 postgresql 中,我可以使用命令行工具 psql 在事务中执行删除或更新:

dbpool.production=> begin;
BEGIN
dbpool.production=*> delete from foo where account_id like '%1000%';
DELETE 9
dbpool.production=*> commit;
COMMIT
dbpool.production=> 
Run Code Online (Sandbox Code Playgroud)

我喜欢在提交事务之前看到我得到了预期的计数。

在 sqlplus(Oracle 命令行工具)中,事情并非如此。当我输入“开始;”时,它只是开始读取更多的输入,从不明显地做任何事情:

SQL> begin;
  2  update opacs_work_orders set customer_id = null;
  3  commit;
  4
Run Code Online (Sandbox Code Playgroud)

我如何使用 sqlplus 对一个事务执行一个或多个语句?

oracle-11g-r2 sqlplus transaction

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

故意使选择失败而无处可去

我们有一个邪恶的查询,它从表中读取每一行,但不应该。为了帮助开发人员找到该查询的来源,当针对该表的任何选择没有 where 子句时,我想使 SQL Server 出错。


一个应用程序正在做一个无处可去的邪恶选择。选择读取大约有 6,500 行的表的每一行。选择在 SSMS 中很快(< 1 秒),但是当由应用程序运行时它很慢(大约 1/2 小时)。我们认为这是因为应用程序正在慢慢地迭代结果集。它是一个用于更新和插入的活动表,因此在进行此读取时可能会阻止其他查询。

开发人员没有理由认为任何应用程序都应该读取该表的每一行。他们怀疑是过去开发人员的疏忽。

到目前为止,邪恶的 query-with-no-where 是我的领跑者,因为它在 Query Store 中的总持续时间最长。

通过使用 SQL Profiler 识别应用程序名称、主机名和数据库用户名,我知道哪个应用程序正在发出恶意查询。该应用程序的开发人员无法找到恶意查询的来源。我想帮忙。

该应用程序使用 C# 并使用 LINQ。邪恶的查询每次都完全相同,具有相同顺序的相同列。可以使用简单的相等来确定发出的查询是否是邪恶的查询。查询以自己的批次发出,没有任何其他查询。

我想让任何针对没有 WHERE 子句(即选择每一行)的表的选择立即失败。我们希望应用程序会记录错误,或者触发 Activity 的最终用户可能会向我们报告 500 错误,这将为我们提供另一个线索来找到发出邪恶查询的代码.

我们针对该表的其他选择具有特定的 where 子句,并且只返回表行的子集。必须允许这些选择继续。

查询

SELECT 
  [a].[Id], 
  [a].[AccountingIntegrationActionTypeId], 
  [a].[CreateDate], 
  [a].[CreatedBy], 
  [a].[FranchiseId], 
  [a].[Message], 
  [a].[ModelObject],
  [a].[ProcessId],
  [a].[RequestedBy], 
  [a].[RequestedFor], 
  [a].[Resolved], 
  [a].[UpdateBy],
  [a].[UpdateDate]
FROM 
  [AccountingIntegrationQueue] AS [a]
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017

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

创建数据库后轻松授予对用户列表的访问权限

我有几个数据库偶尔会被删除和重新创建。当架构更改时会发生这种情况。

我有一组需要访问这些数据库的开发人员。为了授予这些开发人员访问这些数据库的权限,我可以:

  • 使用共享登录,并使用 SSMS 授予该登录访问每个数据库的权限。这是不好的安全性,但相当快。我不想这样做,只是它可以节省我很多时间。

  • 使用个人登录,并使用 SSMS 授予每个登录访问每个数据库的权限。这是很好的安全性,但每次我必须重新创建数据库时都会花费我的时间。我必须选择每个用户的登录名,并编辑用户的用户映射。

如何轻松授予一组用户访问我删除并重新创建的数据库的权限?

版本

  • Microsoft SQL Server 管理工作室 12.0.2569.0

  • SqlServer 12.0.4100.1

范围

  • 大约有六个开发人员。
  • 有两个 SqlServer 服务器。
  • 每个服务器都有两个数据库,开发人员有权访问这些数据库。
  • 数据库每月删除/重新创建一次或两次。

sql-server permissions sql-server-2014

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