小编A-K*_*A-K的帖子

是否有类似的 GETDATE() 返回 DATETIME2

根据 MSDN,Getdate()、GetUtcDate() 和 CURRENT_TIMESTAMP 都返回 DATETIME。我进行了一个简短的测试,结果证实:

CREATE TABLE #t(T DATETIME2(7));
GO

DECLARE @i INT ;
SET @i=1;

WHILE @i<10000 BEGIN ;
INSERT #t VALUES(CURRENT_TIMESTAMP) ;
SET @i=@i+1;
END ;

SELECT DISTINCT t 
FROM #t 
ORDER BY t ;

---

2013-01-28 13:23:19.4930000
2013-01-28 13:23:19.4970000
2013-01-28 13:23:19.5000000
2013-01-28 13:23:19.5030000
2013-01-28 13:23:19.5070000
2013-01-28 13:23:19.5100000
2013-01-28 13:23:19.5130000
Run Code Online (Sandbox Code Playgroud)

(剪辑)

是否有类似的函数返回 DATETIME2(7)?

sql-server-2008-r2

47
推荐指数
1
解决办法
3万
查看次数

我可以添加一个忽略现有违规的唯一约束吗?

我有一个表,该表当前在一列中有重复的值。

我无法删除这些错误的重复项,但我想防止添加其他非唯一值。

我可以创建一个UNIQUE不检查现有合规性的吗?

我曾尝试使用NOCHECK但未成功。

在这种情况下,我有一个表格将许可信息与“公司名称”联系起来

编辑:具有相同“公司名称”的多行是错误数据,但我们目前无法删除或更新这些重复项。一种方法是让INSERTs 使用一个存储过程,该过程将因重复而失败......如果可以让 SQL 自行检查唯一性,那将是可取的。

此数据按公司名称查询。对于少数现有的重复项,这意味着返回并显示多行...虽然这是错误的,但在我们的用例中是可以接受的。目的是防止将来发生。从评论看来,我必须在存储过程中执行此逻辑。

database-design sql-server azure-sql-database

46
推荐指数
3
解决办法
5万
查看次数

数据库中的删除应该如何处理?

我想在 Web 应用程序中实现“取消删除”功能,以便用户可以改变主意并恢复已删除的记录。关于如何实现这一点的想法?我考虑过的一些选项实际上是删除有问题的记录并将更改存储在单独的审计表中,或者不删除记录并使用布尔“已删除”列将其标记为已删除。后一种解决方案需要额外的应用程序逻辑来在正常情况下忽略“已删除”的记录,但会更容易在应用程序端实现恢复记录。

database-design audit delete

45
推荐指数
4
解决办法
6319
查看次数

为什么 ANSI SQL 将 SUM(无行)定义为 NULL?

ANSI SQL标准定义(第6.5章,集功能规范),用于空的结果集的集合函数以下行为:

COUNT(...) = 0
AVG(...) = NULL
MIN(...) = NULL
MAX(...) = NULL
SUM(...) = NULL
Run Code Online (Sandbox Code Playgroud)

为 AVG、MIN 和 MAX 返回 NULL 非常有意义,因为空集的平均值、最小值和最大值是未定义的。

然而,最后一个让我感到困扰:在数学上,空集的 SUM 是明确定义的:0。使用 0,加法的中性元素,作为基本情况使一切保持一致:

SUM({})        = 0    = 0
SUM({5})       = 5    = 0 + 5
SUM({5, 3})    = 8    = 0 + 5 + 3
SUM({5, NULL}) = NULL = 0 + 5 + NULL
Run Code Online (Sandbox Code Playgroud)

定义SUM({})null基本上使“无行”成为不适合其他行的特殊情况:

SUM({})     = NULL  = NULL
SUM({5})    = 5    != …
Run Code Online (Sandbox Code Playgroud)

null aggregate relational-theory sql-standard

30
推荐指数
1
解决办法
7131
查看次数

有人在生产中使用 HierarchyId 吗?它可靠吗?

是否有人在实际生产中使用 HierarchyId 使用合理大小的表,超过几千行?它可靠/性能好吗?到目前为止,我还没有发现任何与供应商无关的人推荐它,并且 Paul Nielsen在这里建议不要使用它。

您在实际生产系统中使用 HierarchyId 的经验是什么?

当您选择 HierarchyId 而不是其替代品时,您使用了哪些标准?

sql-server-2008 sql-server hierarchy

21
推荐指数
2
解决办法
8549
查看次数

是否有一种基于集合的方法来加载/读取带有 HierarchyId 的树枝

我正在玩 HierarchyId,但我还没有想出一种基于集合的方法来执行以下操作:

  • 一次插入所有子树
  • 一次检索所有子树

这个问题与我之前的问题有关,我怀疑使用 HierarchyId 完成这两个任务的唯一方法是一次一个节点或一个级别。如果我使用的是物化路径,那么这两个操作都可以通过一个(且简单的)基于集合的命令轻松完成。

我错过了什么?

编辑:我也错过了移动子树的方法,但我是从 Mikael Eriksson 的评论中学到的

sql-server-2008 sql-server hierarchy sql-server-2008-r2

11
推荐指数
1
解决办法
777
查看次数

实际最低可能的正实数是多少

MSDN 说实数的范围是 - 3.40E + 38 到 -1.18E - 38, 0 和 1.18E - 38 到 3.40E + 38。显然真正的下限要低得多。以下脚本使用 1.401298E-45 填充 REAL 列:

CREATE TABLE a
  (
    r1 REAL NULL ,
    r2 REAL NULL ,
    r3 REAL NULL
  ) ;
GO
INSERT  INTO a
        ( r1, r2 )
VALUES  ( 1.18E-37, 10 ) ;
GO
DECLARE @i INT ;
SET @i = 1 ;

WHILE @i < 20 
  BEGIN ;

    UPDATE  a
    SET     r1 = r1 / r2 ; …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server sql-server-2008-r2 data-integrity

11
推荐指数
1
解决办法
1719
查看次数

差距和孤岛:客户端解决方案与 T-SQL 查询

针对间隙和孤岛的 T-SQL 解决方案能否比在客户端上运行的 C# 解决方案运行得更快?

具体来说,让我们提供一些测试数据:

CREATE TABLE dbo.Numbers
  (
    n INT NOT NULL
          PRIMARY KEY
  ) ; 
GO 

INSERT  INTO dbo.Numbers
        ( n )
VALUES  ( 1 ) ; 
GO 
DECLARE @i INT ; 
SET @i = 0 ; 
WHILE @i < 21 
  BEGIN 
    INSERT  INTO dbo.Numbers
            ( n 
            )
            SELECT  n + POWER(2, @i)
            FROM    dbo.Numbers ; 
    SET @i = @i + 1 ; 
  END ;  
GO

CREATE TABLE dbo.Tasks
  (
    StartedAt SMALLDATETIME NOT NULL ,
    FinishedAt SMALLDATETIME …
Run Code Online (Sandbox Code Playgroud)

performance sql-server gaps-and-islands query-performance

10
推荐指数
1
解决办法
2135
查看次数

允许外键为空

我正在尝试在两个表之间创建关系,其中表 A 中的一列是表 B 中一列的外键。但是,表 B 中有一行当前在该列中为空,这给了我一个错误. 然而,从谷歌搜索这个问题来看,普遍的共识似乎是 null 是外键字段中可接受的值。但是由于错误消息,我仍然无法在 SSMS 中创建这种关系。我怎样才能绕过这个?

错误:

Unable to create relationship 'FK_RELATIONSHIP'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY 
constraint "FK_RELATIONSHIP". The conflict occurred in database "DATABASE", 
table "TABLE A", column 'COLUMN 1'.
Run Code Online (Sandbox Code Playgroud)

请求的 SQL 代码:

USE [DATABASE]
GO
/****** Object:  Table [dbo].[TABLEA]    Script Date: 10/02/2012 17:44:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TABLEA](
[COLUMN1] [nvarchar](4) NOT NULL,
CONSTRAINT [PK_TABLEA] PRIMARY KEY CLUSTERED 
(
[COLUMN1] ASC
)WITH …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server ssms

7
推荐指数
1
解决办法
2万
查看次数

还有其他方法可以选择列的动态列表吗?

我需要让我的用户指定他们想要选择的列列表。到目前为止,我知道实现这一目标的两种方法。

1. 使用refcursors

CREATE OR REPLACE FUNCTION selecttestwithcolumnlist(
ticker character varying, 
columnlist character varying)
  RETURNS refcursor AS
$BODY$
DECLARE 
  ref1 refcursor;
BEGIN

OPEN ref1 FOR EXECUTE 
'select ' || ColumnList || ' from Prices WHERE Ticker=$1;'
USING     Ticker;
RETURN ref1;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)

这个函数很容易从我的 Ado.Net 客户端调用。我需要做的就是传递参数。但是,如果我想从 pgAdmin 测试此功能,则仅当我保持事务打开时,结果集才会在屏幕上打开。这很不方便。当然,将数据显示为 HTML 表格或 Excel 电子表格很容易,但这有点不方便。

2. 使用记录集

CREATE OR REPLACE FUNCTION SelectPrices(colList VARCHAR)
 RETURNS SETOF record AS
$func$
BEGIN

RETURN QUERY EXECUTE
'SELECT ' || colList || ' FROM prices ORDER …
Run Code Online (Sandbox Code Playgroud)

postgresql ado.net dynamic-sql postgresql-9.3 pgadmin-1.18

7
推荐指数
1
解决办法
1万
查看次数