标签: sql-server-2008

使用 GROUP BY 并返回超过 2 列

我正在尝试为表中的每个找到最新的 unit_status和该状态 ( )的时间戳cdtsunid

这是我到目前为止想出的:

with cte as 
(
    select * 
    from un_hi 
    where ag_id = 'bfd' and cdts > '201708' and
    unit_status != 'uc'
)
select distinct(unid), max(cdts2) Last_GPS_Report_Date
from cte
where unid in ('C06','C07','D01','D03','D04','D06')
group by unid
order by unid
Run Code Online (Sandbox Code Playgroud)

它正确地返回每个unid时间的他们的最新状态(max(cdts)),但我想看看有什么unit_status了。

我尝试将这个查询加入到UN_HI表中(这是数据的来源),但我无法让它工作。还有其他建议吗?

sql-server-2008 sql-server greatest-n-per-group

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

NVARCHAR(MAX) 字符串似乎有 6326 个字符,但不会全部打印出来

我正在编写一个存储过程来使用sp_send_dbmail系统存储过程来发送 HTML 电子邮件。我以前使用过这个程序,但以前没有遇到过这个问题。我正在使用此处列出的构建方法

从网上我认为NVARCHAR(MAX)应该最多容纳 2 147 483 647 个字符(ref

但是,当我构建我的输出时,如果我PRINT输出它不会返回完整的字符串。

我已经单独测试了我的 SQL,这按预期返回。

显然我有一个错误,但有人可以指出它是什么吗!

脚本是:

Declare @RawPart varchar(30);
Declare @PO varchar(30);
Declare @NL varchar(12)='<br/>';
DECLARE @BodyHTML  NVARCHAR(MAX) ;
Declare @SubjectText varchar(200);
Declare @StaffEmail varchar(50);
Declare @MrpDate varchar(12);


Set @MrpDate=(Select convert (varchar(12),[SnapshotDate],103) from [dbo].[MrpReqCtl] )

set @StaffEmail='SOMEPLACE@DOMAIN.co.uk';
set @SubjectText ='Schedule Update from MRP Email';
Set @PO='106277';
Set @RawPart=(Select Distinct  MStockCode From dbo.PorMasterDetail Where PurchaseOrder=@PO and LineType=1)


--N'<p>Attention From the Mrp run '+@MrpDate+N'</p><p>Has …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server stored-procedures database-mail

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

为什么这个 CTE 会立即返回大部分结果,但需要几分钟才能完成?

我有一个大致像这样的架构(这是我实际架构的简化):

CREATE TABLE foo (
    key1 NUMERIC(6) NOT NULL,
    key2 VARCHAR(32) NOT NULL,
    val VARCHAR(255) NULL,
    CONSTRAINT foo_pk PRIMARY KEY (key1, key2) --PK on key1, key2
    )
GO
CREATE TABLE bar (
    key1 NUMERIC(6) NOT NULL,
    key2 VARCHAR(32) NOT NULL,
    val VARCHAR(255) NULL,
    CONSTRAINT bar_pk PRIMARY KEY (key1, key2) --PK on key1, key2
    )
GO
CREATE TABLE aliases (
    id VARCHAR(32) NOT NULL PRIMARY KEY,
    text VARCHAR(255) NOT NULL,
    CONSTRAINT aliases_uk UNIQUE (text) --PK on id, unique constraint on text …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 sql-server recursive query-performance

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

使用函数创建持久计算列

我正在与程序员一起研究数据库解决方案。他们想要添加一个计算列来模拟旧查询、过程和系统的旧键,并为其编制索引。新密钥将是 GUIDS。

为此,他们希望为计算列创建一个函数,该函数创建一个值并将其持久化。它不会让他们保留该列。我对这个想法没有任何热情的模糊,我也无法在网上找到有关该技术的任何信息(它是一种技术吗?)。

我认为他们需要添加触发器。有没有人有任何想法?

该函数将按如下方式运行:

(SELECT [INT Identity field] FROM TABLE WHERE [GUID COLUMN] = @GUIDKEY
Run Code Online (Sandbox Code Playgroud)

它根据 GUID 返回一个 INT 标识字段。

这将在插入相关表时运行。因此,如果表一持有主键,则相关表二将更新(使用传入的 GUID)以从表一中获取键并将其插入到表二中。

sql-server-2008 sql-server computed-column

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

为什么 SQL Server 会自动删除手动创建的索引?

是什么导致 Microsoft SQL Server 自动删除手动创建的索引?我创建的每个索引都会在几个小时内删除。

这是我用来创建索引的代码。受影响的视图运行得更快。索引消失/在几个小时内被删除。受影响的视图运行缓慢或失败。

CREATE NONCLUSTERED INDEX IX_Tablename_fieldname 
ON dbo.Tablename (fieldname) 
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

5
推荐指数
2
解决办法
2401
查看次数

从 Unix 日期获取年份 DATEPART

在我的数据库中,日期保留为自 1970 年 1 月 1 日起/之前经过的天数,我认为这是一种 Unix 日期格式,例如。今天是 2018 年 5 月 23 日,值为 17674。

我正在尝试select针对日期表中的列运行语句以仅显示年份。

如果我运行这个:

datepart(year, c.cko_date)
Run Code Online (Sandbox Code Playgroud)

我得到的日期是 1940 年代(应该是最近几年)。

当我跑

select datepart(year, getdate()) 
Run Code Online (Sandbox Code Playgroud)

它正确地告诉我日期是 2018 年。

关于我做错了什么的任何建议?

sql-server-2008 sql-server date-format format date

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

如何修复“可能的连锁链接问题”的损坏。

我有一个包含 15 000 000 条记录的大表,突然 Select Top 停止工作。我使用 MS SQL 管理工作室。

这不起作用,查询返回 0 条记录:

SELECT TOP (10) 
       [Id]
      ,[Result]
      ,[DateStamp]
      ,[ConversionTime]
      ,[Converter]
      ,[SourceFileFormat]
      ,[DestinationFileFormat]
      ,[Ip]
      ,[Source]
      ,[Error]
      ,[UserId]
      ,[TokenId]
      ,[ConversionCost]
  FROM [ca-v2].[dbo].[Log]
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,如果我尝试选择一个 ID 字段,它会正常工作。

工作正常:

SELECT TOP (10) 
       [Id]        
  FROM [ca-v2].[dbo].[Log]
Run Code Online (Sandbox Code Playgroud)

此外,如果我在最后添加 order by 查询也开始工作:

SELECT TOP (10) 
       [Id]
      ,[Result]
      ,[DateStamp]
      ,[ConversionTime]
      ,[Converter]
      ,[SourceFileFormat]
      ,[DestinationFileFormat]
      ,[Ip]
      ,[Source]
      ,[Error]
      ,[UserId]
      ,[TokenId]
      ,[ConversionCost]
  FROM [ca-v2].[dbo].[Log]
  Order By [DateStamp]
Run Code Online (Sandbox Code Playgroud)

我跑到DBCC CHECKTABLE桌子上,收到以下错误:

错误:消息 8978,级别 16,状态 1,第 1 行

表错误:对象 ID 1029578706,索引 …

sql-server-2008 sql-server corruption

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

Sql Server 2008+ 中的 GZip 现有 varbinary(max) 列

由于客户端应用程序将 PDF 文件存储为 varbinary,我有一个现有的旧表,大小约为 180GB。我希望能够在创建新解决方案时使用 GZIP 压缩所有行的该列以帮助节省空间(我希望有一种方法可以在 SQL 中执行此操作,而不必为此编写客户端代码)。我看到该COMPRESS方法可用于 Sql Server 2016,但我需要一个适用于 2008 的解决方案。任何想法将不胜感激。

sql-server-2008 sql-server compression varbinary

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

可以定期针对所有视图运行 sp_refreshview 吗?

Microsoft SQL Server 有一个名为sp_refreshview的系统存储过程,它更新传入的视图的元数据。

对我的所有视图定期运行此过程是否有任何不利之处?(例如性能统计受到影响等?)

我可以每晚、每小时、每隔几分钟运行一次吗?

如果这样做没有任何影响,这似乎是确保我的视图元数据在它们引用的基础实体可能发生更改时保持最新的好方法。

sql-server-2008 sql-server stored-procedures metadata t-sql

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

如何在 SQL Server 2008 中导入 CSV 文件?

我正在尝试在 SQL Server 2008 中导入 CSV 文件。BULK INSERT是一种方法,但它适用于SQL Server 2014 以后的CSV 。

实现这一目标的替代方法是什么?

任何想法/想法都非常感谢。

sql-server-2008 sql-server import csv

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