标签: sql-server

在行之间找到共同的价值

我有以下带有示例值的表结构:

Number      Reference                 Length                                  Quantity
----------- ------------------------- --------------------------------------- ----------
16002983    ASH 14                    383.000000                              4
16002983    ASH 14                    1669.000000                             4
16002983    GLAS-NP                   403.000000                              1
16003002    SZR 16                    1402.000000                             1
16003002    Energy Surcharge F        56556.680000                            1
16003256    SZR 14                    726.000000                              1
16003256    Energy Surcharge F        40706.820000                            1
16003256    7283-ASB                  726.000000                              1
16003308    ASH 14                    740.000000                              4
Run Code Online (Sandbox Code Playgroud)

截至目前,该表有 742 个条目,并且每天都在扩展。

我需要找到一个Reference在所有Numbers之间共享的,如果有的话。

如何?我甚至不知道我是否需要JOINS, GROUP BY,别的东西吗?我似乎在逻辑上失败了。

任何帮助表示赞赏。

sql-server

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

以有效的方式获取错误日志位置

我正在使用这个 sql 来获取我的错误日志位置:

EXEC xp_readerrorlog 0, 1, N'Logging SQL Server messages in file'
Run Code Online (Sandbox Code Playgroud)

但是,有时我有非常大的日志文件(大约 1gb,我无法控制这些文件的循环)上面的查询需要大约 10 秒才能在这些大文件上运行,这太长了。

鉴于这段文本总是在文件的前几行,如果我能说“给我前 1 行然后停止阅读”就好了,但我认为 xp_readerrorlog 不支持这一点?

或者,如果我知道文件中第一行的日期,我可以指定一个日期范围,如下所示:

DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
SET @startDate = '2016-01-28 12:00:00'
SET @endDate = DATEADD(mi, 5, @startDate)
EXEC xp_readerrorlog 0, 1, N'Logging SQL Server messages in file', NULL, @startDate, @endDate
Run Code Online (Sandbox Code Playgroud)

哪个快得多。但是,我不知道如何计算出这个日期——在许多情况下,它与实例进程的开始时间几乎相同(SELECT login_time FROM sysprocesses WHERE spid = 1但这不能保证)

我还尝试使用master..xp_instance_regread从 读取日志文件位置SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters,但这似乎并不总是准确的。

有没有人对我如何以有效的方式计算日志文件位置有任何建议,即使我的日志文件很大。

sql-server t-sql error-log

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

为什么我可以查询超过 1024 列,但无法查看同一个查询?

我的老板正在请求一个大于 1024 列的视图,其中他在查询视图时只会选择他想要的几列,以便实际返回的列小于 1024。为什么我可以查询大于 1024 的列,但是我无法将这个完全相同的查询保存为视图?

我正在使用 SQL Server 2012 企业版

sql-server view sql-server-2012

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

可重用查询

我有 3 个具有完全相同 DDL 的表(我知道这是一个可怕的设置),但每个表都有不同的字段值。我希望能够为所有 3 个选择编写一个查询,而不是必须使用 3 个不同的选择查询。这是示例 DDL 和单个查询,可以将其合并为 1 个查询吗?

Create Table InfoForJane
(
  genid int IDENTITY(1,1) PRIMARY KEY
  ,name varchar(500)
  ,numofdays varchar(100)
)
Create Table InfoForJoe
(
  genid int IDENTITY(1,1) PRIMARY KEY
  ,name varchar(500)
  ,numofdays varchar(100)
)
Create Table InfoForJessie
(
  genid int IDENTITY(1,1) PRIMARY KEY
  ,name varchar(500)
  ,numofdays varchar(100)
)
Run Code Online (Sandbox Code Playgroud)

以下是我希望合并为一个的查询

Select 
genid
,name
,case
  when numofdays NOT IN ('1-3','4-6','7-9') then '1-3'
  else numofdays
end As [NumofDays]
from rashapa.munich.dbo.InfoForJane

Select
genid
,name
,case
  when numofdays …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2

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

如何在 SQL Server AlwaysOn 中配置 SSIS

我为我的 SQL Server 设置了 AlwaysOn 可用性组。现在我想配置SSIS。我该怎么做?下面的链接提供了一些信息,但由于我不是 DBA,因此很难理解这篇文章:

AlwaysOn 可用性组和 SQL Server 作业,第 23 部分:维护计划备份和 SSIS 包

有人可以指导我在可用性组中进行 SSIS 的基本设置并解释节点之间如何同步吗?

更新

我指的是 SSIS 目录数据库 (SSISDB)

我可以在我的连接管理器中使用监听器吗?

sql-server ssis availability-groups sql-server-2014

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

Trying to drop database only if it does not exist by using the db_id function fails

When the database foo is not yet created and I I run this

IF db_id(N'foo') IS NOT NULL
BEGIN
  ALTER DATABASE [foo] SET OFFLINE
  GO

  DROP DATABASE [foo]
  GO
END
Run Code Online (Sandbox Code Playgroud)

I get a message

Cannot drop the database 'foo' becuase it does not exist or you do not have permission.

Why?

I have confirmed that the sql statement select db_id(N'foo') returns NULL.

sql-server t-sql sql-server-2012

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

在 Where 子句中使用日期时间变量

我正在尝试将销售日期 >= 的所有数据提取到某个日期时间。当我执行查询时,出现以下错误:

消息 241,级别 16,状态 1,第 15 行
从字符串转换日期和/或时间时转换失败。

我应该改变什么才能让他的查询运行?下面是示例 DDL

Declare @datetime datetime = GetDate(), @sql varchar(max)

Create Table #dinonuggets
(
  saledate datetime
  ,item varchar(500)
)

Insert Into #dinonuggets Values
('2016-03-30 12:02:00.000','chair')
,('2016-03-04 08:12:48.000','stove')
,('2016-03-07 09:37:39.000','washer')


Set @sql = 'Select * FROM #dinonuggets WHERE saledate >= '+@datetime+' '
Print @sql
Exec (@sql)
Run Code Online (Sandbox Code Playgroud)

我的预期输出将是
03/30/2016 12:02:00.000 椅子,
因为这是唯一符合标准的数据

sql-server t-sql sql-server-2008-r2

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

查找安装了多少 SQL Server 实例

在 SQL Server 2012 实例上,如何使用 SQL 查询获取 SQL Server 实例的名称?

我想显示当前安装在 SQL Server 中的实例名称。

sql-server sql-server-2012

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

一对多到多表

设计表 A 中的每个条目都连接(1:n)到表 B 或表 C 中的条目的关系的正常方法是什么?

或者特别是:有一个用于角色、电影、剧集和电视节目季的表格。一个角色与 1) 电影或 2) 节目有关(除了 n:n 与季节(季节常规)和剧集之外)

x 可以是电影和节目的 ID。

两个相同的表(tv_characters 和 movie_characters)?

使用两个主键会更好吗(一个总是“电影”或“电视”)?

database-design sql-server

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

是否可以在服务器端禁用快速只进光标?

我有一个使用 ODBC 访问 SQL Server 2012 数据库的应用程序,SQLSetStmtAttr用于将SQL_SOPT_SS_CURSOR_OPTIONS选项设置为SQL_CO_FFO. 这意味着它从数据库中读取的内容由快速只进游标支持。

这在大多数情况下是可以的,但是有时快速只进游标的性能明显低于“通常”静态游标(我们将使用 default 获得的游标SQL_CO_OFF)。

问题:有没有办法强制 SQL Server 不使用快进游标?

显然,正确的方法是更改​​应用程序,并且该过程正在进行中,但这需要时间,同时我正在寻找临时解决方法。

到目前为止,我唯一的想法是使用它:(来自Fast Forward-only Cursors

Fast Forward-only 游标的隐式转换

在以下情况下,仅快进游标会隐式转换为其他游标类型:

  • 如果 SELECT 语句将一个或多个表与触发器表(INSERTED/DELETED)连接起来,则游标将转换为静态游标

但是,即使是临时解决方法,这似乎也有点难看。可能有更好的方法吗?


旁注:在这种情况下,仅快速向前游标表现不佳的主要原因是它们不支持并行性

对于非快进sys.dm_exec_cursors给我:

API | 快照 | 只读 | 全球 (0)

而快进选项是:

API | 快进| 只读 | 全球 (0)

快照选项比快进选项快 5 倍。如果我查看它们的查询计划,除了DegreeOfParallelism之外,它们没有太大不同。快照是 16 而快进是 0。问题是我们正在从视图中读取(我们没有太多控制权),而这些视图在其设计中是次优的。

sql-server cursors sql-server-2012

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