Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

2
如何在支点中创建经常性的工作日作为列?
我是编程和数据库的新手,对于以下情况的帮助,我将不胜感激。 我在SQL Server中使用PHP。我正在建立一个员工出勤系统,我想创建一个(枢轴)表,其中月份作为行,所有工作日名称作为列(针对特定年份)。单元格中的值将是天数(1、2、3 ... 31)。 单元格的背景色(已存在于表格列中)声明了员工请假的类型。该表有以下栏目:employee_id, leave_date, leave_type, leave_type_color。 我想要达到如下结果: 谢谢。
8 sql-server  php  pivot 

2
预测审查的数据库设计
我试图学习更多有关关系数据库的知识,并且发现没有更好的方法来学习然后实际去做。我决定亲自尝试一下“个人预算会计和预测”。到目前为止,我已经进行了一些研究,并希望对当前的数据库设计和规范化有一些了解。 您对我当前的数据库设计有何想法和建议?我在下面提供了一些信息,以便更好地帮助您:) 披露:这是一个个人项目。不用于家庭作业或工作。 商业事实 银行ACCOUNT可以有很多ENTRIES An ENTRY可以是CREDIT或DEBIT 的ENTRY日期已计入贷方或借方 安ENTRY有一个PAYEE 一个ENTRY可以被关联到BUDGET CATEGORY A CREDIT的金额为ENTRY A CREDIT的说明ENTRY 一个CREDIT可以在未来计划 A的CREDIT频率和/或金额可能会重复出现 A DEBIT的金额为ENTRY A DEBIT的说明ENTRY 一个DEBIT可以在未来计划 A的DEBIT频率和/或金额可能会重复出现 A PAYEE有个名字 一个BUDGET有很多BUDGET CATEGORIES A BUDGET只能与一个日历月份关联 一个BUDGET CATEGORY可以包含许多ENTRIES A BUDGET CATEGORY有个名字 A BUDGET CATEGORY有BUDGET金额 A FORECAST有开始日期 A FORECAST有结束日期 A FORECAST有期初余额 一个FORECAST有很多FORECASTED DAYS 一个FORECAST有一个FORECASTED BUDGET A FORECASTED DAY有一个日期 …

1
由查询存储引起的阻塞。无法清除或禁用
我最近将2016 SQL Server更新为SP2,并于2018年8月发布了最新的CU(KB4458621)。就在最后一天左右,我注意到我正在进行一些阻止。我无法杀死SPID b / c,这不是用户进程。根据SP_WHO2,命令为“查询存储ASYN”。我尝试通过Script和UI清除数据并禁用查询存储。似乎没有任何效果,它只是旋转然后开始引起更多阻塞。还有其他人遇到这个问题吗?谁能帮我弄清楚如何成功禁用查询存储吗?SP_WhoIsActive @show_System_SPIDS =以下1个结果(仅查询存储结果) 更新-这现在导致TempDB驱动器填满。尝试在几个小时后重新启动,看看是否可以解决问题。会及时向大家发布。 谢谢,内特

1
是否有可能超载SQL Server函数?
是否可以重载SQL Server函数?是标量(如ltrim),还是聚合函数(如count)? 即使这是一个非常非常糟糕的主意。可能吗? T-SQL用户定义的函数重载有什么重复?我要说的不是100%重复,因为那是2005版的。也许这已经改变了?

1
如果系统在下一个检查点之前发生故障,那么脏页会怎样?
假设数据库使用完全恢复模型,那么在SQL Server中(通过INSERT/ UPDATEetc)写入记录时,预先写入日志将确保在修改数据页之前将更改写入日志文件。 日志和数据页条目均在RAM中进行,然后由Checkpoint提交到磁盘。 如果发生系统崩溃(出于参数争用而断电),脏页(在RAM中更改但未提交到磁盘的IE数据)会发生什么情况,因为RAM的内容在系统重新启动后无法生存,是否会丢失数据? ? 编辑 经过一些测试,我可以看到脏页没有丢失,但是我不确定为什么: 使用本教程 创建一个测试数据库 CREATE DATABASE DirtyPagesDB GO USE DirtyPagesDB GO 关闭自动检查点 DBCC TRACEON(3505, -1); DBCC TRACESTATUS(); 创建一个表,插入一些数据并发出一个检查点: CREATE TABLE t1 (Speaker_Bio CHAR(8000)) GO INSERT INTO t1 VALUES ('SQL'),('Authority') GO CHECKPOINT 确认没有脏页 -- Get the rows of dirtied pages SELECT database_name = d.name, OBJECT_NAME …

1
数据固有地排序,就好像它是聚集索引一样
我有下表,其中包含750万条记录: CREATE TABLE [dbo].[TestTable]( [Id] [int] IDENTITY(1,1) NOT NULL, [TestCol] [nvarchar](50) NOT NULL, [TestCol2] [nvarchar](50) NOT NULL, [TestCol3] [nvarchar](50) NOT NULL, [Anonymised] [tinyint] NOT NULL, [Date] [datetime] NOT NULL, CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, …

1
如何使用内置函数解析数据库触发器的名称?
我有一个数据库触发器,用于防止我在用户数据库中创建某些过程。 它出现在中sys.triggers,带有object_id,但我无法使用该object_id功能来找到它。 SELECT OBJECT_ID(t.name, t.type) AS object_id, * FROM sys.triggers AS t; 同样,我可以在中找到它sys.dm_exec_trigger_stats。我object_name无法解决,但是可以解决object_definition。 SELECT OBJECT_NAME(dets.object_id, dets.database_id) AS object_name, OBJECT_DEFINITION(dets.object_id) AS object_definition, * FROM sys.dm_exec_trigger_stats AS dets; 是否有一个函数可以接受数据库级触发器的对象ID,并返回其名称?


4
在案例陈述中退出查询?
我正在尝试设置一个查询,以便它将比较来自两个不同表的两个日期,如果它们相等,则查询退出。如果它们不相等,则查询将继续并插入一些内容。我不知道如何使它做我想要的。 SELECT TOP(1) @dateA=a.someDate FROM a ORDER BY DESC; SELECT TOP(1) @dateB=b.someDate FROM b ORDER BY DESC; CASE WHEN @dateA=@dateB THEN raiseerror('dates equal',20,-1) with log; Insert statements; 任何帮助将不胜感激。

3
备份数据库是否会缩小事务日志的大小?
我正在尝试收集有关SQL数据库的一些知识,并且对事务日志文件(LDF)有一些疑问。 首先,在创建数据库时,必须为数据库和日志文件定义初始文件大小。从我的看到,一旦在磁盘上创建了文件,它们将具有指定的大小,而不管数据库中是否有实际数据或是否有任何事务(日志)。 我的理解是备份数据库: 截断事务日志,并 缩小尺寸 通过“清空”磁盘中的日志来清除磁盘上的LDF文件。 现在,由于日志文件的大小似乎固定,因此我似乎无法正确理解。我的实际问题是这样的: 截断日志实际上对日志文件(LDF)有什么作用?该过程应防止磁盘装满。 如果我对某些概念的理解不正确,请纠正我。 谢谢!


2
如何在SQL Server中执行析乘?
在PostgreSQL中,我经常想做一些事情,例如找到7 的阶乘。 SELECT 7!; -- PostgreSQL is so full featured -- it even supports a prefix-factorial SELECT !!7; 甚至Excel都有FACT, =FACT(7) 如何使用SQL Server 2017 Enterprise做到这一点?

2
从SSMS时间表中选择TOP N行丢失
我在数据库中使用时态表,当我在Management Studio 2017(v17.4 14.0.17213.0)中右键单击表时,在上下文菜单中没有看到`` 选择前1000行''(非时态表没有问题) ) 有什么想法如何找回此上下文菜单吗?我感觉这与我正在运行的SQL Server版本有关(SQL 13.1.4001.0 Express Edition)

4
在查询中的多个列上调用同一个表值函数的最有效方法
我正在尝试优化一个查询,其中在20列上调用了相同的表值函数(TVF)。 我所做的第一件事是将标量函数转换为内联表值函数。 是否使用CROSS APPLY最佳执行方式对查询中的多个列执行相同的功能? 一个简单的例子: SELECT Col1 = A.val ,Col2 = B.val ,Col3 = C.val --do the same for other 17 columns ,Col21 ,Col22 ,Col23 FROM t CROSS APPLY dbo.function1(Col1) A CROSS APPLY dbo.function1(Col2) B CROSS APPLY dbo.function1(Col3) C --do the same for other 17 columns 有更好的选择吗? 可以在针对X个列的多个查询中调用同一函数。 功能如下: CREATE …

3
SQL Server错误,“ FETCH语句中选项FIRST的无效用法。”
从2012年开始,SQL Server文档显示它们支持OFFSET..FETCH我尝试使用的而不是LIMIT。 以下内容在PostgreSQL中可以很好地对结果集进行采样: SELECT * FROM ( VALUES (1),(2),(3) ) AS t(x) OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY; 但是,使用SQL Server,我得到 Msg 153, Level 15, State 2, Line 4 Invalid usage of the option FIRST in the FETCH statement. 这里发生了什么?SQL Server是否支持标准化的OFFSET.. FETCH?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.