我真的对术语数据库、用户和模式感到困惑。谁能解释一下它们之间的区别(如果是的话)?
如果它们相同,那么它们之间有什么相似之处?我们如何使用它们?我们如何创建它们?
上周我一直在做 MS10775A 课程,出现了一个培训师无法可靠回答的问题是:
重新索引会更新统计信息吗?
我们发现网上的讨论都在争论它有没有。
让我们检查这两个语句:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Run Code Online (Sandbox Code Playgroud)
如果CONDITION 1
是TRUE
,会CONDITION 2
被检查吗?
如果CONDITION 3
是FALSE
,会CONDITION 4
被检查吗?
条件如何WHERE
:SQL Server 引擎是否优化WHERE
子句中的所有条件?程序员是否应该以正确的顺序放置条件以确保 SQL Server 优化器以正确的方式解析它?
添加:
感谢 Jack 提供链接,来自 t-sql 代码的惊喜:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' …
Run Code Online (Sandbox Code Playgroud) 我们一直在使用安装在 Oracle Enterprise 11gR2 上的 BI 软件和存储库数据库。
其中一些批处理报告将尝试访问可能仍被锁定的数据库表。如何确定 Oracle 表是否已锁定?是否有任何 SQL 语句显示像历史详细信息以供分析?
当我执行此 SQL 时:
USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
该登录名已有一个使用不同用户名的帐户。
我怎么知道我的登录帐户的这个不同的用户名是什么?
我很好奇是否可以创建一个包含永远无法更改的列的表,但该表的其他列可以。
例如,我可以想象一个CreatedByUser
永远不应更改的列。
SQL Server 中是否有为此提供内置功能,还是只能通过触发器或其他方式实现?
我使用的是 PostgreSQL 9.2,当我启动系统 (Kubuntu) 时它会自动运行。
我怎样才能避免这种情况?
我需要手动启动它,我不希望它在无人看管的情况下启动,因为我需要查看控制台。
MSDN“缺少连接谓词事件类”表示“表示正在执行没有连接谓词的查询”。
但不幸的是,这似乎并不那么容易。
例如,非常简单的情况:
create table #temp1(i int);
create table #temp2(i int);
Select * from #temp1, #temp2 option (recompile);
Run Code Online (Sandbox Code Playgroud)
表中没有数据,也没有警告,尽管它显然没有连接谓词。
如果我查看 SQL Server 2005 的文档(相同的链接,只是其他服务器版本),会有一句额外的句子:“仅当连接的双方返回多于一行时才会产生此事件。 ”这将使在以前的情况下完美的感觉。没有数据,所以双方都返回0行,没有警告。插入行,得到警告。嗯不错。
但是对于下一个令人困惑的情况,我在两个表中插入相同的值:
Insert into #temp1 (i) values (1)
Insert into #temp1 (i) values (1)
Insert into #temp2 (i) values (1)
Insert into #temp2 (i) values (1)
Run Code Online (Sandbox Code Playgroud)
我得到:
-- no warning:
Select * from #temp1 t1
inner join #temp2 t2 on t1.i = t2.i
option (recompile)
-- has warning:
Select * from …
Run Code Online (Sandbox Code Playgroud) 我们正在使用带有唯一标识符的 SQL Server 2012,我们注意到在执行选择时在末尾添加了额外的字符(所以不是 36 个字符),它仍然返回与 UUID 的匹配项。
例如:
select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8'
Run Code Online (Sandbox Code Playgroud)
返回带有 uuid 的行7DA26ECB-D599-4469-91D4-F9136EC0B4E8
。
但是如果你运行:
select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS'
Run Code Online (Sandbox Code Playgroud)
它还返回带有 uuid 的行7DA26ECB-D599-4469-91D4-F9136EC0B4E8
。
SQL Server 在进行选择时似乎忽略了 36 以外的所有字符。这是错误/功能还是可以配置的东西?
这不是一个大问题,因为我们在前端验证了长度,但对我来说这似乎不是正确的行为。
有没有办法 mysqldump 没有某些字段的表?
让我解释一下:
我有一个名为tests
. 在tests
我有 3 个表:USER
,TOTO
和TATA
. 我只是想mysqldump的表的一些领域USER
,因此不包括像一些领域mail
,ip_login
等等。
我怎样才能做到这一点?
sql-server ×5
t-sql ×3
condition ×1
index ×1
index-tuning ×1
locking ×1
logins ×1
mysql ×1
mysqldump ×1
optimization ×1
oracle ×1
postgresql ×1
schema ×1
security ×1
statistics ×1
ubuntu ×1
users ×1