标签: t-sql

获取快照数据文件列表

我需要以编程方式删除一个包含所有快照的数据库,然后重新创建该数据库并创建一个新快照。我无法从查询中找到快照文件所在的位置。

本质上,我们有几个环境,它们在放置这些文件的位置上不一致,所以我需要我的代码足够聪明,以便将这些文件放回原来的位置。

澄清一下:当我说快照文件时,我指的是 .ss 文件。

sql-server t-sql snapshot sql-server-2012

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

如何从一个表中找到另一个缺失的值?

我是一名初级开发人员。我被要求创建一个子查询来解决这个问题。如果问题不清楚,请告诉我,以便我提供更多详细信息。

我有两张桌子,ArticleAuthor。我的任务是执行以下操作:

选择 Author 表中不存在的不同 Author 值。结果不应包含任何为 NULL 或空字符串的作者。目的是查找在文章表中但不在作者表中的任何作者姓名。

我在两个表中都有作者列。这个问题可以通过连接这两个表来解决吗?

我试过了

select distinct name 
from author 
where name NOT IN ( select author 
                    from article 
                    where author IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)

它没有给我想要的结果:(

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

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

用其他值更新空值

我是 SQL Server 世界的新手。在下面的示例中,我有两家公司:

  • 建筑模块
  • 红水泥

每个公司只有一个条目具有列的值power1, power2, power3

我需要更新表,以便每个公司的所有列都有一个值。换句话说,我需要更新所有空白(空)值。

使用虚构数据的示例:

Create Table #Rentarious
(
  c1 varchar(200)
  ,yryryryr datetime
  ,power1 varchar(200)
  ,power2 varchar(200)
  ,power3 varchar(200)
)   

Insert Into #Rentarious VALUES
('Building Blocks','2016','Red','Blue','Green')
,('Red Cement', '2012', 'Pink','Purple','Orange')

Insert Into #Rentarious(c1, yryryryr) VALUES 
('Building Blocks', '2012')
,('Building Blocks', '2013')
,('Building Blocks', '2014')
,('Red Cement', '2016')
,('Red Cement', '2011')
Run Code Online (Sandbox Code Playgroud)

编写更新语句以将列的空值更新为表power1, power2, power3中已列出的值的语法是什么?

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

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

将“ACCOUNTS\”后的字母改为小写?

我有一个数据库表,users具有不同的用户名大小写(参见示例)。如何将字母更新ACCOUNTS\为小写?

ACCOUNTS\James.McAvoy
ACCOUNTS\michael.fassbender
ACCOUNTS\nicholas.hoult
ACCOUNTS\Oscar.Isaac
Run Code Online (Sandbox Code Playgroud)

更新后的期望结果:

ACCOUNTS\james.mcavoy
ACCOUNTS\michael.fassbender
ACCOUNTS\nicholas.hoult
ACCOUNTS\oscar.isaac
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql update

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

用于查询的 CLR SQL 与 T-SQL

我知道 CLR 存储过程在过程代码中更有效,而 T-SQL 更适合查询 - 但是我很难决定使用什么来满足我的特定需求,我想知道是否还有其他事情我在做决定时应该考虑一下。

我计划创建的代码涉及查询一组数据、实现一些算法(随着时间的推移会变得更加复杂)以及将数据插入到数据库中。此存储过程将由调度程序部署 - 最有可能是 azure webJobs,因为据我所知 Azure SQL 不支持 db 作业。

为什么我想到使用 C#

假设我可以从我的服务器加载 DAL 库,并利用 OOP - 我想我可以为这个问题实现一个对编码器更友好的解决方案 - 至于性能,我认为它会更好或至少在比较中不明显。

为什么我想到使用 T-SQL

我实际上并不认为这是一个更好的解决方案,但可能有一些我忽略的东西可能是 T-SQL 的一个很好的例子,因为对我来说它没有任何意义。

最重要的是

有没有办法可以创建一个 T-SQL 存储过程,调用一个带有复杂对象作为参数的 C# 存储过程 - 执行我的算法并返回要插入的数据,然后从 T-SQL 插入它?似乎是最优雅、性能最好的 (?) 解决方案(假设它是可能的,并且从 T-SQL 调用 CLR 没有任何缺点)。

sql-server t-sql azure-sql-database sql-clr

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

PERCENT_RANK 的分布不超过 100

我正在尝试以 0-100 的比例找出查询的每个给定记录的位置。我这样使用PERCENT_RANK排名功能:

select Term, Frequency, percent_rank() over (order by Frequency desc) * 100
from Words
Run Code Online (Sandbox Code Playgroud)

但是当我查看结果时,我看到的不是从 0 开始到 100 的列,而是从 0 开始到 37.xxxx 的列。

虽然BOL没有明确提到结果分布在 0-100 的范围内,但我对这个词的理解percent让我使用了这个排名函数。

我在这里想念什么?

sql-server t-sql rank

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

SPID 和 session_id 之间的差异

我正在配置一个作业以获取违规进程的SPID并将其终止。我正在使用来自@AdamMachanic的伟大sp_Whoiscative和在登录名和 SPID 和session_id值上加入sysprocesses之间的混合,因为这些值应该是相同的(或者我错了,那是我的错误?)。

我得到了一些我不明白的东西:对于来自 sysprocesses的相同SPID,我从 whoisactive 结果中得到不同的 session_id值。这里有什么不正确?

这是我正在使用的代码。在当前日期时间之前 10 秒获取值的过滤器是因为 whoisactive 正在使用参数 @deltainterval 运行,每次运行需要大约 10 秒来执行。

USE master;

--  Log information about current running processes to table Log_WhoIsActive
    EXEC [master].[dbo].[sp_WhoIsActive]
        @get_full_inner_text = 1,
        @get_plans = 2,
        @get_outer_command = 1,
        @get_transaction_info = 1,
        @get_task_info = 2,
        @get_locks = 1,
        @get_avg_time = 1,
        @get_additional_info = 1,
        @delta_interval = 2,
        @sort_order = '[start_time] DESC',
        @destination_table = 'Log_WhoIsActive_tests';

--compare date from …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2014

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

T-SQL 查询上次完整备份的日期、大小和位置

我使用下面的 T-SQL 查询来确定上次完整数据库备份的日期,并返回备份文件的大小和位置。我的问题是,对于没有备份或没有备份历史记录的数据库,它根本不会返回任何数据。理想情况下,我想修改查询以便返回所有数据库,无论它们是否有任何备份历史记录。任何人都可以建议如何修改以下查询以适应此情况?

WITH LastBackUp AS
(
SELECT  bs.database_name,
        bs.backup_size,
        bs.backup_start_date,
        bmf.physical_device_name,
        Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )
FROM  msdb.dbo.backupmediafamily bmf
JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id
JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id
WHERE   bs.[type] = 'D'
AND bs.is_copy_only = 0
)
SELECT 
        database_name AS [Database],
        CAST(backup_size / 1048576 AS DECIMAL(10, 2) ) AS [BackupSizeMB],
        backup_start_date AS [Last Full DB Backup Date],
        physical_device_name AS [Backup File Location]
FROM LastBackUp
WHERE Position = …
Run Code Online (Sandbox Code Playgroud)

sql-server backup t-sql msdb

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

查找月中星期几的迭代

我有一个日期维度表,我需要在其中添加一个新列,在该列中定义一个月内一周中某天的迭代(第二个周一/周二/周三/周四/周五/周六/周日等为 2) .

是否可以仅在表格的日期列(“日期”类型)上进行计算?

sql-server t-sql sql-server-2016

3
推荐指数
2
解决办法
1171
查看次数

使用 Send DBMail 发送多个附件

我以为你只需要用 a 分隔两个文件名,;但我的语法失败并出现错误

Msg 102, Level 15, State 1, Line 251
Incorrect syntax near '@filename2'.
Run Code Online (Sandbox Code Playgroud)

这是我的完整语法,我需要做什么才能将两个文件附加到我的电子邮件中?

Declare @filename1 varchar(max), @filename2 varchar(max)
Set @filename1 = 'C:\Testfiles\Test1.csv'
Set @filename2 = 'C:\Testfiles\Test2.csv'

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Mod',
  @from_address = 'modis@modisglobal.com',
  @recipients= 'rsmith@gmail.com',
  @subject= 'Test Email', 
  @body = @body1,
  @file_attachments = @filename1;@filename2;
Run Code Online (Sandbox Code Playgroud)

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

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