通常,当我看到使用以下内容的 SQL 时:
select * from employees where epmloyeeTypeId in (select id from type where name = 'emp')
Run Code Online (Sandbox Code Playgroud)
我where用这个替换:
select e.* from employees e
inner join type t on t.id=e.epmloyeeTypeId and t.name = 'emp'
Run Code Online (Sandbox Code Playgroud)
如果它是一个not in(如下所示)而不是一个in子句,是否可以对逆做同样的事情?
INSERT into Subscriptions(ProjectId, RecordTypeCID, NTID, Active, Added, LastUpdate, UpdateBy)
SELECT @ProjectId, RecordTypeCID, @NTID, 1, GETDATE(), GETDATE(), @NTID
FROM @Check CHK
WHERE CHK.ActiveStatus=1
And Not Exists (SELECT SubscriptionId FROM Subscriptions
WHERE ProjectId=@ProjectId
and NTID=@NTID
and RecordTypeCID = CHK.RecordTypeCID
) …Run Code Online (Sandbox Code Playgroud) 我在死锁分析中遇到了死点。根据msdn:
RangeX-X 为 Exclusive range,独占资源锁;在更新范围内的键时使用。RangeI-N 是插入范围,空资源锁;用于在将新键插入索引之前测试范围。
所以我明白,如果我在 2 个键列上有一个索引 - 并且我插入一个新键,我将拥有 RangeI-N 锁,但如果我从索引更新现有键,我将拥有 RangeX-X。
但我的问题或多或少复杂。假设我在 A、B 列和 C 列上有索引 IX_keys_included。
在 Serializable 隔离模式下,我为包含的列 C 插入一个新值。索引 IX_keys_included 是否会有 RangeI-N 或 RangeX-X 锁?实际上,鉴于我为索引中包含的列插入了一个新列,是否会有任何锁定?
我即将进行审计,我想知道审计员在审计 ERP 系统的数据库时会寻找哪些物理、电子和逻辑访问控制。我对这个过程真的很陌生,任何指导将不胜感激。
我们正在 MSSQL 2008 R2 标准中创建一个数据库,我们将在其中存储大量记录。我们估计每年在一张表中有 2 亿多条记录,我们主要是在数据上进行极少更新或删除的插入。它是一个数据存档系统,我们每天都在其中插入历史记录。我们将根据用户请求生成关于此历史记录的不同类型的报告,因此我们有一些担忧并需要技术投入和建议。
data-warehouse database-design sql-server database-recommendation
我们正在开展一个项目,该项目需要每天从 Excel 电子表格中导入数据。数据将从预定义的模板中导入,我们在想什么,首先我们将数据上传到临时表中并执行清理操作(删除不必要的信息,在父表中添加新行并获取它们的FK等)。
测试当前在单用户负载下的应用程序 - 随着测试数据增加到生产大小(每个表 400k-2M 行),一些 SELECT sp 的速度不再足够快(测试数据有限,每个过去 <30 毫秒,现在是 100-200 毫秒,但有几个,所以延迟在 UI 中变得明显)。
我目前正在制作一款 MMORPG 游戏,它可能有几千名玩家同时在线(可能不是;只是一厢情愿)。首先我们想使用 MySQL,但我听说它对于这种规模还不够快。
哪个 DBMS 足够快?它有多像 SQL Server(我在学校学过 SQL Server)?
在 SSMS 中使用 SQLCMD 模式时(不是从命令行),有没有办法将当前服务器和实例分配给变量?这不同于分配普通的 TSQL 变量。
我想使用 SQLCMD 变量扩展的强大功能来替换部署脚本中特定于环境的值,而不是我已经进入的现有 tsql 字符串构建混搭。除了当前环境的一个例外,使用 SQLCMD 处理部署的进展非常顺利。
--
-- define 2 sqlcmd variables that will be expanded in scripts
--
:setvar dbServer "DEVA2\DEV2"
:setvar dbNotServer @@servername
SELECT
'$(dbServer)' AS hard_coded_value
, @@servername AS [servername]
, '$(dbNotServer)' AS dbNotServer
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果。
hard_coded_value servername dbNotServer
DEVA2\DEV2 DEVA2\DEV2 @@servername
Run Code Online (Sandbox Code Playgroud)
肉饼说3分之2 还不错,但我宁愿有 3 分之 3 的解决方案。当该脚本部署到测试服务器时,我不想相信部署人员会编辑脚本。
如果使用 SQLCMD 的唯一解决方案是完全从命令行调用脚本,我可以接受这一点,但我想把它扔在这里,因为我对使用 SQLCMD 不感兴趣。
:setvar dbNotServer @@servername
SELECT '$(dbNotServer)' AS worked
Run Code Online (Sandbox Code Playgroud)
结果
worked
DEVA\DEV2
Run Code Online (Sandbox Code Playgroud)
如果我想计算一列并在多于 1 列中使用结果,如何在不进行两次计算的情况下执行此操作?
例子:
SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail
FROM sometable
Run Code Online (Sandbox Code Playgroud)
如何避免在不使用多个选择的情况下写两次?
我有一个Object表,它是从另一个数据库的集成服务(如果需要,我可以更改)填充的。在某些时候,我们需要在另一个表中手动添加帖子,ObjectObjectGroup (ObjectId, ObjectGroupId)如果Object.ObjectType有某个整数值,则需要该表。由于集成服务不处理这种更新,我正在考虑向 Object 表添加一个触发器,其伪代码如下:
if Object.ObjectType = 10
begin
if Object.ObjectNumber like '<string pattern>'
begin
insert into ObjectObjectGroup values...
end
end
Run Code Online (Sandbox Code Playgroud)
这种设置是明智的,还是在性能方面有更好的方法?
sql-server ×10
audit ×1
bulk ×1
except ×1
import ×1
locking ×1
mysql ×1
oracle ×1
performance ×1
rdbms ×1
scalability ×1
security ×1
select ×1
trigger ×1