小编Ban*_*San的帖子

什么是 WITH CHECK CHECK 约束?

我有一些自动生成的 T-SQL,这可能是有效的,但我不太明白。

ALTER TABLE [dbo].[MyTable]
WITH CHECK
CHECK CONSTRAINT [My_FORIEGN_KEY];
Run Code Online (Sandbox Code Playgroud)

我知道什么是外键约束,但什么是外键约束CHECK CHECK

sql-server constraint t-sql

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

为什么这个执行计划有计算标量?

我有一个简单的SELECT声明。

USE [AdventureWorks2014]
GO

SELECT *
FROM Sales.SalesOrderDetail sod
Run Code Online (Sandbox Code Playgroud)

执行计划有两个Compute Scalar.

显示计算标量的执行计划 为什么是这样?我原以为只得到Index Scan或者Table Scan?

第一个(最右边的)有

 [[AdventureWorks2014].[Sales].[SalesOrderDetail].LineTotal] = Scalar Operator(isnull(CONVERT_IMPLICIT(numeric(19,4),[AdventureWorks2014].[Sales].[SalesOrderDetail].[UnitPrice] as [sod].[UnitPrice],0)*((1.0)-CONVERT_IMPLICIT(numeric(19,4),[AdventureWorks2014].[Sales].[SalesOrderDetail].[UnitPriceDiscount] as [sod].[UnitPriceDiscount],0))*CONVERT_IMPLICIT(numeric(5,0),[AdventureWorks2014].[Sales].[SalesOrderDetail].[OrderQty] as [sod].[OrderQty],0),(0.000000)))
Run Code Online (Sandbox Code Playgroud)

当第二个有:

[[sod].LineTotal] = Scalar Operator([AdventureWorks2014].[Sales].[SalesOrderDetail].[LineTotal] as [sod].[LineTotal])
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization execution-plan

9
推荐指数
1
解决办法
3399
查看次数

找到 OPTIMIZE FOR UNKNOWN 正在使用的值

如果我的OPTIMIZE FOR UNKNOWN存储过程中有一个,我是否能够看到数据库确定的最佳值?

performance sql-server stored-procedures optimization plan-cache

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

SqlDbType.Structured ADO.NET 类型有上限吗?

SqlDbType.Structured将数据发送到 sproc 中的 Table 参数时,类型的行数\总大小是否有上限?

我找不到任何建议,所以我假设如果发送了一个巨大的数据集,只会有一个超时。

我正在查看 2000 行,所以没什么可怕的。我只是想抢占任何潜在的爆炸。

sql-server ado.net table-valued-parameters

6
推荐指数
1
解决办法
1710
查看次数

获取汇总行的 ID

我有以下查询来获取与最新日期对应的值:

SELECT MAX(RowAddedDate), X, Y
FROM dbo.MyTable
GROUP BY X, Y
Run Code Online (Sandbox Code Playgroud)

这很好,但我需要获取此查询中每一行的 ID。如果我添加 ID,我会得到所有内容,因为 ID 需要在GROUP BY.

我该如何解决这个问题?

sql-server aggregate t-sql greatest-n-per-group

5
推荐指数
1
解决办法
5547
查看次数

exec(sql) 的安全替代方案

我发现exec(sql)代码中隐藏了一些语句。它们存在是有充分理由的,因为这些语句不能直接编写,但它们是一个明显的攻击媒介。

有没有安全的替代品exec(some sql)?将正确参数化的东西,包括语句中的表名?

security sql-server sql-injection dynamic-sql t-sql

4
推荐指数
1
解决办法
2705
查看次数

加载大量测试数据的快速方法

我试图用大量虚拟数据填充表,以便我可以进行优化等。

我有以下几点:

WHILE @RowCount < 3000000
BEGIN

    SELECT @Random = ROUND(@Upper * RAND(), 0)

    INSERT INTO [dbo].[Test]
               ([Id]
               ,[OtherKey]
               ,[Description])
         VALUES
               (@RowCount
               ,@Random
               ,CAST(@Random AS VARCHAR(max)))

    SET @RowCount = @RowCount + 1
END
Run Code Online (Sandbox Code Playgroud)

然而,这似乎很慢。

有没有更好的方法来自动将半随机行加载到数据库表中?

新脚本

这个似乎很快:

USE [Test]
GO

/****** Object:  Table [dbo].[Test]    Script Date: 17/10/2016 21:22:39 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

USE [Test]
GO

CREATE TABLE [dbo].[Test](
    [Id] [int] NOT NULL,
    [OtherKey] [int] NOT NULL,
    [Description] [varchar](max) NOT NULL,
    [Time] [datetime] NOT NULL
) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization bulk-insert

4
推荐指数
1
解决办法
3495
查看次数

获取没有“结束”事件的行

我有一系列代表 start ( S) 或 and ( E) 的行thing

+----+-------+-------+
| Id | Event | Thing |
+----+-------+-------+
|  1 | S     | A     |
|  2 | E     | A     |
|  3 | S     | B     |
|  4 | E     | B     |
|  5 | S     | C     |
|  6 | S     | D     |
|  7 | S     | E     |
+----+-------+-------+
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取没有结束事件的行。

SELECT [a].[Id] AS [ID a],
       [a].[Event] AS [Event …
Run Code Online (Sandbox Code Playgroud)

t-sql

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