有关SQL Server 2008查询和截断语法的分隔符字符的问题。

时间:2011-07-29 15:08:42

标签: sql sql-server-2008

我是SQL的新手,所以如果这是一个愚蠢的问题我会道歉。

我何时需要在架构和表名称周围使用括号'['和']'?我可以一直使用它们吗?

现在,假设我执行了以下操作来创建表

CREATE TABLE [dbo].[table1] ([ID] VARCHAR(5))

这很有用。我通过运行select语句验证了它。假设时间继续,我添加了一堆行。现在如果我想删除所有行,我应该使用delete还是truncate?看来我应该这样做

TRUNCATE [dbo].[table1]

但是当我通过jtds jdbc driver执行此操作时,我在'dbo'附近的语法不正确或者在关键字TRUNCATE附近的语法不正确。

语法中缺少什么?

5 个答案:

答案 0 :(得分:5)

TRUNCATE [dbo].[table1]

应该是

TRUNCATE TABLE [dbo].[table1]

括号用于允许无效的列名称,例如以数字开头或在其中包含空格的列名称

例如

CREATE TABLE [ ]([ ] INT)
INSERT [ ] VALUES(1)

SELECT [ ] FROM [ ]

你总是可以使用括号,它们不是必需的,但可以防止有问题的列名

答案 1 :(得分:2)

我认为你想要TRUNCATE TABLE ......它本身没有TRUNCATE。

TRUNCATE TABLE [dbo].[table1];

答案 2 :(得分:1)

对于保留字的表名和列名,或者包含空格,需要[]。 MS倾向于将它们放在一切,但大部分时间它们都不是必需的。

正如Aaron所说,你想要TRUNCATE TABLE。

答案 3 :(得分:1)

回答你问题的第一部分:

  

我何时需要在架构和表名称周围使用括号'['和']'?我可以一直使用它们吗?

当名称与SQL关键字冲突时使用括号(通常可以通过IDE中的颜色看到)和是 - 您可以随时使用它们。

答案 4 :(得分:1)

截断表和删除自然不尽相同,但它们通常看起来做同样的事情。

截断表需要一些提升的权限和截断表“删除表中的所有行而不记录单个行删除.TRUNCATE TABLE类似于没有WHERE子句的DELETE语句;但是,TRUNCATE TABLE更快并且使用更少的系统和事务日志资源。“

这意味着Truncate始终会删除表中的所有行,并且无法作为事务的一部分回滚。

Delete From几乎总是您想要在事务处理过程中执行的操作。在作为独立的adhoc命令进行开发和测试时,Truncate Table是合适的。如果您想要将Truncate Table放入存储过程中,请检查自己并查看Delete是否更合适。