我可以在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) 在开发过程中遇到了相当奇怪的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
在SQL Server 2016中,我使用STRING_SPLIT函数收到此错误
SELECT * FROM STRING_SPLIT('a,b,c',',')
Run Code Online (Sandbox Code Playgroud)
错误:
无效的对象名称'STRING_SPLIT'.
我们有如下所示的预约表。每个约会都需要归类为“新”或“后续”。在(该患者的)首次预约后 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 Server肯定的,但我希望能够让某人访问数据库,但我真的希望他们可以访问一个表.
很容易限制某人只访问一个数据库,但不知道我是否可以限制到一个表.
我的想法是用另一个表的同义词创建另一个数据库,然后限制对该数据库的访问,但我想知道是否有人能想到更好的方法.
我也不相信它会起作用,因为我认为会有权限冲突.
sql-server installation windows-7 windows-7-x64 sql-server-2016
我在具有多个显示器,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.我尝试过的事情:
我知道昨晚我上班时爆炸了,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 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
因此用例如下 - 有一些参数,我想根据这些参数从一个表或另一个表中选择数据.
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理解在某个查询中只应扫描一个表?
我正在尝试使用SSRS 2016实现自定义表单身份验证.
在本文中,引用了SQL Server报告服务产品示例.
样本页面上的最新支持版本(关于安全性扩展)似乎是SSRS 2012.我已成功将样本页面上收集的信息应用于SSRS 2014实例.但是,看起来SSRS 2016的文件系统结构已经发生了一些变化(读取,不再是ReportManager文件夹),这似乎使示例页面提供的指令无效.
有谁知道我在哪里可以找到建立自定义身份验证的更新程序?
sql-server-2016 ×10
sql-server ×9
sql ×6
t-sql ×3
c# ×1
grant ×1
installation ×1
permissions ×1
ssms ×1
ssms-2016 ×1
ssrs-2016 ×1
temporal ×1
windows-7 ×1