Questions tagged «syntax»

一组定义符号组合的规则,这些符号被认为已针对该语言正确构建。

2
如何用表值函数联接表?
我有一个用户定义的函数: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end 现在,我想将其加入另一个表,如下所示: select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 换句话说,对于所有Foo记录,其中SomeCriterion均为1,我想查看Foo ID和Desc以及输入所返回的Field1和的值。Field2ut_FooFuncFoo.ID 这样做的语法是什么?

3
COALESCE与ISNULL的性能差异?
我已经看到很多人使用COALESCE函数代替ISNULL。通过互联网搜索,我发现COALESCE是ANSI标准,因此我们知道使用COALESCE的好处。但是,ISNULL似乎更易于阅读,因为它看起来更清楚自己在做什么。 我还意识到ISNULL有点棘手,因为它在不同的数据库服务器和不同的语言上有不同的作用。 在我看来,所有这些都归结为风格和标准。鉴于样式是主观的,是否有任何理由在ISNULL上使用COALESCE(反之亦然)?具体来说,是否有一个相对于另一个的性能优势?

6
如何在PostgreSQL中使用VALUES创建临时表
我正在学习PostgreSQL,并试图弄清楚如何创建一个临时表或WITH声明来代替常规表,以进行调试。 我查看了CREATE TABLE的文档,它说VALUES可以用作查询,但没有给出示例。VALUES其中链接的子句的文档也没有示例吗? 因此,我编写了一个简单的测试,如下所示: DROP TABLE IF EXISTS lookup; CREATE TEMP TABLE lookup ( key integer, val numeric ) AS VALUES (0,-99999), (1,100); 但是PostgreSQL(9.3)抱怨 “ AS”处或附近的语法错误 我的问题是: 我该如何修正以上陈述? 我如何适应它的使用WITH block? 提前致谢。

4
MySQL将UTC时间设置为默认时间戳
如何设置默认值为当前UTC时间的时间戳列? MySQL将UTC_TIMESTAMP()函数用于UTC时间戳: mysql> SELECT UTC_TIMESTAMP(); +---------------------+ | UTC_TIMESTAMP() | +---------------------+ | 2012-07-01 11:36:35 | +---------------------+ 1 row in set (0.00 sec) 所以我尝试了: CREATE TABLE `blah` ( `creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP, ... 和其他变体一样UTC_TIMESTAMP(),但没有成功。


1
(NOLOCK)与NOLOCK
当我看到类似以下查询的查询时,我正在调查一些阻塞: SELECT SomeField FROM SomeTable NOLOCK 我看到了,NOLOCK并且很好奇它如何阻止其他查询(在本例中为DELETE语句)。我快速浏览了使用的锁sp_lock,这是我看到的内容: DB S GRANT TAB IS GRANT PAG S GRANT 现在,我的理解是NOLOCK应该只获取一个Schema-Stability锁,为什么它随后会获取IS锁? 我的好奇心激起了。我查看了BOL,发现有两种使用方法,WITH (NOLOCK)并且已经过时了(NOLOCK),所以我决定尝试一下。我运行以下查询,随后运行sp_lock: SELECT SomeField FROM SomeTable WITH (NOLOCK) DB S授权 TAB Sch-S GRANT SELECT SomeField FROM SomeTable (NOLOCK) DB S授权 TAB Sch-S GRANT 果然,这里有我的架构稳定性锁。所以我的问题是:这是怎么回事?如果使用NOLOCK的可接受语法是WITH (NOLOCK)或(NOLOCK),那么为什么仅使用普通NOLOCK字符(不带括号)运行查询时却不会出现查询错误?如果支持,为什么要抓住IS锁?我在这里想念什么?我一直在网上寻找答案,但到目前为止还很短。 我已经在2008R2和2012上对此进行了测试。

2
如何在Oracle中声明和使用变量?
我的主要技能是使用SQL Server,但是有人要求我对Oracle查询进行一些调优。我编写了以下SQL: declare @startDate int select @startDate = 20110501 我得到这个错误: declare @startDate int select @startDate = 20110501 Error at line 1 ORA-06550: line 1, column 9: PLS-00103: Encountered the symbol "@" when expecting one of the following: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> …

2
特殊的Oracle外连接语法案例
我在应该从Oracle外连接语法移植到SQL标准外连接语法的查询中看到了以下内容: SELECT ... FROM A, B, C, D, E WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY = C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY = E.B_KEY(+) AND 'CONSTANT' = C.X_ID(+) 现在,翻译外部联接语法通常是一个机械过程,但是最后一行让我感到困惑。这是什么意思?它有什么作用?
16 oracle  join  syntax 

2
为什么CTE应该以分号开头?
我只是在看StackOverflow上的一篇文章,其中Aaron Bertrand建议使用CTE代替数字表,这是一种执行手头任务的优雅方法。我的问题是,为什么CTE的第一行以分号开头? ;WITH n AS (SELECT TOP (10000) n FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 ) AS x ORDER BY n ) SELECT n FROM n ORDER BY n; -- look ma, no gaps! 这是为了确保WITH语句不会被解析为先前的内容SELECT或其他内容?我在SQL Server 2005 BOL中看不到有关在WITH之前使用分号的任何信息。
14 sql-server  t-sql  cte  syntax 

1
是什么允许SQL Server用对象名称交换传递给系统过程的字符串
是什么导致将对象名称传递给系统存储过程合法sp_helptext呢? 什么机制将对象名称转换为字符串? 例如 -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.' -- an additional case that does not work. …

2
将数据从Oracle迁移到SQL Server的最简单方法是什么?
我们的产品之一同时支持Oracle和SQL Server作为数据库后端。我们有一个客户希望从Oracle后端切换到Microsoft SQL Server,这对我们来说不是典型的过渡。 将所有数据从整个Oracle模式中获取到SQL Server数据库中的最简单方法是什么? 模式只包含普通的旧表,没有花哨的东西。也许有一个或两个存储过程,我们手工迁移就不会有问题。 我可以使用Oracle的SQLDeveloper将表数据导出为CREATE和INSERT语句,但是这些与SQL Server上使用的语法不匹配,而且我不希望必须手动修复语法错误。


1
嵌套在OUTER JOIN内部的INNER JOIN语法与查询结果
TLDR;如果您查看这两个执行计划,有一个简单的答案是哪个更好?我故意没有创建索引,因此更容易看到正在发生的事情。 在我之前的问题(我们发现不同的联接样式(即嵌套与传统)之间的查询性能差异)进行了跟进之后,我意识到嵌套语法也可以修改查询的行为。考虑以下两个查询。 SELECT a.*, m.*, n.* FROM dbo.Autos a LEFT JOIN dbo.Models m JOIN dbo.Manufacturers n -- <-- Nested INNER JOIN ON n.ManufacturerID = m.ManufacturerID ON m.ModelID = a.ModelID 这并不一定使制造商加入,以包括与ModelID自动行是不是在型号表。 使用传统语法,我们必须将Manufactures的联接更改为外部联接,就像这样……但这会更改查询计划。 SELECT a.*, m.*, n.* FROM dbo.Autos a LEFT JOIN dbo.Models m ON m.ModelID = a.ModelID LEFT JOIN dbo.Manufacturers n …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.