标签: sql-server-2016

如何将System-Versioned Temporal Table与Entity Framework一起使用?

我可以在SQL Server 2016中使用时态表.遗憾的是,Entity Framework 6还不知道这个功能.是否有可能使用实体框架6 使用新的查询选项(请参阅msdn)?

我创建了一个带有员工时态表的简单演示项目:

在此输入图像描述

我使用edmx将表映射到实体(感谢Matt Ruwe):

在此输入图像描述

使用纯sql语句一切正常:

using (var context = new TemporalEntities())
{
    var employee = context.Employees.Single(e => e.EmployeeID == 2);
    var query = 
      $@"SELECT * FROM [TemporalTest].[dbo].[{nameof(Employee)}]
         FOR SYSTEM_TIME BETWEEN
         '0001-01-01 00:00:00.00' AND '{employee.ValidTo:O}'
         WHERE EmployeeID = 2";
    var historyOfEmployee = context.Employees.SqlQuery(query).ToList();
}    
Run Code Online (Sandbox Code Playgroud)

是否可以在没有纯SQL的情况下将历史记录功能添加到每个实体?我的解决方案作为实体扩展与反射来操纵SQL查询IQuerable并不完美.是否有现有的扩展或库来执行此操作?

编辑:(基于Pawel的评论)

我试图使用表值函数:

CREATE FUNCTION dbo.GetEmployeeHistory(
    @EmployeeID int, 
    @startTime datetime2, 
    @endTime datetime2)
RETURNS TABLE
AS
RETURN 
(
    SELECT 
        EmployeeID,
        [Name], 
        Position, 
        Department, 
        [Address], …
Run Code Online (Sandbox Code Playgroud)

c# sql entity-framework temporal sql-server-2016

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

SQL Server错误或功能?十进制数转换

在开发过程中遇到了相当奇怪的SQL Server行为.在这里,绝对相同的数字我们有完全相同的公式.唯一的区别是我们如何得到这个数字(4.250).从表,临时表,变量表或硬编码值.在所有情况下,圆角和铸造都是完全相同的.

-- normal table
CREATE TABLE [dbo].[value]
(
[val] [decimal] (5, 3) NOT NULL
) 
INSERT INTO [value] VALUES (4.250 )
SELECT ROUND(CAST(val * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val FROM [value] AS pr

-- inline query from normal table
SELECT * FROM (SELECT ROUND(CAST(val * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val FROM [value] AS pr) a

-- record without table
SELECT ROUND(CAST(4.250 * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2 sql-server-2014 sql-server-2016

20
推荐指数
3
解决办法
1975
查看次数

SQL Server 2016,无效的对象名称'STRING_SPLIT'

在SQL Server 2016中,我使用STRING_SPLIT函数收到此错误

SELECT * FROM STRING_SPLIT('a,b,c',',')
Run Code Online (Sandbox Code Playgroud)

错误:

无效的对象名称'STRING_SPLIT'.

sql t-sql sql-server sql-server-2016

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

没有 WHILE 循环的查询

我们有如下所示的预约表。每个约会都需要归类为“新”或“后续”。在(该患者的)首次预约后 30 天内的任何预约(对患者)都是随访。30 天后,约会再次“新”。30 天内的任何约会都将成为“后续”。

我目前正在通过输入 while 循环来做到这一点。
如何在没有 WHILE 循环的情况下实现这一目标?

在此处输入图片说明

桌子

CREATE TABLE #Appt1 (ApptID INT, PatientID INT, ApptDate DATE)
INSERT INTO #Appt1
SELECT  1,101,'2020-01-05' UNION
SELECT  2,505,'2020-01-06' UNION
SELECT  3,505,'2020-01-10' UNION
SELECT  4,505,'2020-01-20' UNION
SELECT  5,101,'2020-01-25' UNION
SELECT  6,101,'2020-02-12'  UNION
SELECT  7,101,'2020-02-20'  UNION
SELECT  8,101,'2020-03-30'  UNION
SELECT  9,303,'2020-01-28' UNION
SELECT  10,303,'2020-02-02' 
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2016

19
推荐指数
2
解决办法
660
查看次数

SQL Server:您是否可以限制只能访问一个表

我认为答案是SQL Server肯定的,但我希望能够让某人访问数据库,但我真的希望他们可以访问一个表.

很容易限制某人只访问一个数据库,但不知道我是否可以限制到一个表.

我的想法是用另一个表的同义词创建另一个数据库,然后限制对该数据库的访问,但我想知道是否有人能想到更好的方法.

我也不相信它会起作用,因为我认为会有权限冲突.

sql-server permissions grant sql-server-2016

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

为什么我不能在Windows 7 Professional 64位SP1上安装SQL Server Express 2016?

尝试在VMware中的Windows 7 Professional x64 SP1中安装SQL Server 2016 Express时,我收到以下消息.

sql server 2016表示错误

我该怎么做才能解决这个问题?

sql-server installation windows-7 windows-7-x64 sql-server-2016

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

将SQL Server 2016升级到版本13.0.15700.28后,经常发生System.OutOfMemoryException

我在具有多个显示器,16个演出DDR4 RAM,4个Ghz I7,GTX 970的开发盒上运行Windows 10 Pro 64位.我使用SQL Server 2016 Developer Edition和VS 2015 Enterprise Update 3运行SQL Management Studio.

昨天我将Sql Management Studio 2016升级到13.0.15700.28,它就像是我的机器的毒药.现在一两个小时后,它会抛出一个内存不足,除了:

执行批处理时发生错误.错误消息是:抛出了类型'System.OutOfMemoryException'的异常

现在,如果您正在执行超过几百万行的非常大的返回集,这有时是典型的.不,如果你在做

Select Top 10 * from SmallObject
Run Code Online (Sandbox Code Playgroud)

我正在为现有开发系统的新对象创建一些新的表和过程.这只是因为没有押韵或理由而突然发生.它似乎也是SSMS的部分阻塞错误,因为它现在冻结系统并尝试启动连接对话窗口,就像我首先启动SSMS并尝试连接到数据源一样.到目前为止,它一直爬行,直到我从任务管理器中杀死它.我也在运行Redgate的SQL Prompt 7.2.0.241.我尝试过的事情:

  1. 尝试一次保持五个以下,并在完成后关闭它们.
  2. 不要将标签从一个屏幕折断到另一个屏幕.
  3. 关闭Redgate,看看它是否是罪魁祸首
  4. 检查内存使用情况

我知道昨晚我上班时爆炸了,SSMS让我知道它已经崩溃了.这可能是一个MS错误,但Redgate或其他配置中可能存在一个错误,所以我认为最好问SO并看看别人看到了什么.这个SSMS版本截至2016年8月15日,因此它非常新.

应用程序事件日志的堆栈跟踪中的两个错误:事件1026

应用程序:ssms.exe Framework版本:v4.0.30319描述:由于未处理的异常,进程已终止.例外信息:

系统中的System.Windows.Forms.CreateHandle()处的System.Windows.Forms.Control.CreateHandle()处的System.Windows.Forms.NativeWindow.CreateHandle(System.Windows.Forms.CreateParams)中的System.ComponentModel.Win32Exception System.Windows.Forms.Control.CreateControl(布尔)System.Windows.Forms.Control.CreateControl(布尔)的System.Windows.Forms.Control.CreateControl(Boolean)中的.Windows.Forms.Control.CreateControl(Boolean)布尔值System.Windows上的System.Windows.Forms.Form.WmShowWindow(System.Windows.Forms.Message ByRef)处的System.Windows.Forms.Control.CreateControl()处的System.Windows.Forms.Control.CreateControl(Boolean).在System.Windows.Forms.Form.WmShowWindow(System.Windows.)的System.Windows.Forms.ScrollableControl.WndProc(System.Windows.Forms.Message ByRef)中的Forms.Control.WndProc(System.Windows.Forms.Message ByRef). System.Windows.Forms.Control + ControlNativeWindow.OnMessage(Syst)上的System.Windows.Forms.Form.WndProc(System.Windows.Forms.Message ByRef)中的Forms.Message ByRef)在System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr,Int32,IntPtr,IntPtr)的System.Windows.Forms.Control + ControlNativeWindow.WndProc(System.Windows.Forms.Message ByRef)中的em.Windows.Forms.Message ByRef)

另一个是事件日志1002错误'应用程序挂起'并没有我能看到的真正有意义的帮助:

Ssms.exe 2015.130.15700.28 68ac 01d1f98d17a32d16 4294967295 C:\ Program Files(x86)\ Microsoft SQL Server\130\Tools\Binn\ManagementStudio\Ssms.exe 62a64950-658b-11e6-a2c8-f832e4a07fda

54006F00700020006C006500760065006C002000770069006E0064006F0077002000690073002000690064006C00650000000000

更新于2016年8月23日:

仍然会不时收到此错误:

程序Ssms.exe版本2015.130.15700.28停止与Windows交互并关闭.要查看是否有关于该问题的更多信息,请在"安全和维护"控制面板中检查问题历史记录.进程ID:35f8开始时间:01d1fca7e48da2da终止时间:4294967295应用程序路径:C:\ Program Files(x86)\ Microsoft SQL Server\130\Tools\Binn\ManagementStudio\Ssms.exe报告ID:4e8b6ab9-693f-11e6-a2cb- f832e4a07fda错误包全名:
错误包相关的应用程序ID:

显然这对我以外的人来说是一个问题,因为我在这里得到投票:https …

sql-server ssms sql-server-2016 ssms-2016

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

STRING_AGG不是公认的内置函数名称

我已经下载并安装了SQL Server 2016.当我尝试使用该STRING_AGG功能时,我收到此错误.这是我的代码:

SELECT STRING_AGG(cast(FieldNumber AS VARCHAR(100)), ',')
FROM Fields
Run Code Online (Sandbox Code Playgroud)

我已经安装了SQL Server 2016和SP1.还有什么我需要做的.这是我尝试使用的功能.String Agg

sql sql-server sql-server-2016

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

表函数中的条件UNION ALL

因此用例如下 - 有一些参数,我想根据这些参数从一个表或另一个表中选择数据.

create table dbo.TEST1 (id int primary key, name nvarchar(128))
create table dbo.TEST2 (id int primary key, name nvarchar(128))
Run Code Online (Sandbox Code Playgroud)

所以我创建了这样的函数:

create function [dbo].[f_TEST]
(
    @test bit
)
returns table
as
return (
    select id, name from TEST1 where @test = 1

    union all

    select id, name from TEST2 where @test = 0
)
Run Code Online (Sandbox Code Playgroud)

当我使用常量运行它时,执行计划很棒 - 只扫描一个表

select * from dbo.f_TEST(1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,当我使用变量时,计划并不是那么好 - 两个表都被扫描

declare @test bit = 1

select * from dbo.f_TEST(@test)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么是否有任何提示(或技巧)强制SQL Server理解在某个查询中只应扫描一个表?

sql t-sql sql-server sql-execution-plan sql-server-2016

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

使用SSRS 2016进行自定义身份验证(安全扩展)

我正在尝试使用SSRS 2016实现自定义表单身份验证.

本文中,引用了SQL Server报告服务产品示例.

样本页面上的最新支持版本(关于安全性扩展)似乎是SSRS 2012.我已成功将样本页面上收集的信息应用于SSRS 2014实例.但是,看起来SSRS 2016的文件系统结构已经发生了一些变化(读取,不再是ReportManager文件夹),这似乎使示例页面提供的指令无效.

有谁知道我在哪里可以找到建立自定义身份验证的更新程序?

sql-server reporting-services sql-server-2016 ssrs-2016

15
推荐指数
2
解决办法
8160
查看次数