Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server默认值:为什么用一个或两个括号?_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server默认值:为什么用一个或两个括号?

Sql server SQL Server默认值:为什么用一个或两个括号?,sql-server,tsql,Sql Server,Tsql,如果运行此脚本以检索数据库中的所有默认值定义: select c.name as columnname, t.name as tablename, d.definition as value, d.name as constraintname from sys.default_constraints d join sys.columns c on d.parent_column_id = c.column_id and d.pa

如果运行此脚本以检索数据库中的所有默认值定义:

select 
    c.name as columnname, t.name as tablename, 
    d.definition as value, d.name as constraintname
from
    sys.default_constraints d
    join sys.columns c
        on d.parent_column_id = c.column_id
        and d.parent_object_id = c.object_id
    join sys.tables t
        on c.object_id = t.object_id
您将获得许多默认值,如:

(getdate())
((0))
('')
('2099-12-31')

我的问题是,为什么会有括号?它们是必要的吗?为什么有些值有一对,而另一些值有两对?编写T-SQL脚本时是否要精确地遵循计数?

这只是SQL在内部存储它们的方式

除非由于某种原因,中的
扩展为
(…或…
),否则不需要它们

您应该使用and和OR尝试检查约束。老天爷。

够了。然而,FWIW,我注意到一种模式,至少在我的数据库中,当SQLServer将默认值存储在单括号和双括号中时是这样的

  • 数字的双括号(在我的例子中是所有整数)
  • 非数字的单括号(即字符串和函数)
  • 所有定义至少存储在一组括号中
  • 没有存储在两组以上括号中的定义
虽然这可能不会影响功能等,但作为程序员,知道有一种模式感觉很好

下面是一个根据这些规则检查数据库默认值的查询(这可能并不完美,但只是一个开始)

我检查了一些数据库,这些规则仍然有效。然而,我想看看其他人是否也看到了同样的结果。

有趣的是(至少)

显示没有任何括号的TSQL

CREATE TABLE dbo.doc_exz (
  column_a INT,
  column_b INT DEFAULT 50);
CREATE TABLE dbo.doc_exz (
  column_a INT,
  column_b INT DEFAULT 50);