相关疑难解决方法(0)

SQL Server的隐藏功能

SQL Server的一些隐藏功能是什么?

例如,未记录的系统存储过程,做一些非常有用但没有足够文档记录的技巧?


答案

感谢所有人的所有伟大答案!

存储过程

  • sp_msforeachtable:使用'?'运行命令 替换为每个表名(v6.5及以上)
  • sp_msforeachdb:使用'?'运行命令 替换为每个数据库名称(v7及更高版本)
  • sp_who2:就像sp_who一样,但是有更多关于故障排除块的信息(v7及更高版本)
  • sp_helptext:如果需要存储过程的代码,请查看&UDF
  • sp_tables:返回范围内数据库的所有表和视图的列表.
  • sp_stored_procedures:返回所有存储过程的列表
  • xp_sscanf:将字符串中的数据读入每个format参数指定的参数位置.
  • xp_fixeddrives ::找到具有最大可用空间的固定驱动器
  • sp_help:如果要了解表的结构,索引和约束.还有视图和UDF.快捷键是Alt + F1

片段

  • 以随机顺序返回行
  • 按上次修改日期的所有数据库用户对象
  • 仅限退货日期
  • 查找日期在当前周内某处的记录.
  • 查找上周发生的日期记录.
  • 返回当前周开始的日期.
  • 返回上周开始的日期.
  • 请参阅已部署到服务器的过程的文本
  • 删除与数据库的所有连接
  • 表格校验和
  • 行校验和
  • 删除数据库中的所有过程
  • 还原后正确重新映射登录ID
  • 从INSERT语句调用存储过程
  • 按关键字查找程序
  • 删除数据库中的所有过程
  • 以编程方式查询数据库的事务日志.

功能

  • HASHBYTES()
  • EncryptByKey的
  • PIVOT命令

杂项

  • 连接字符串附加功能
  • TableDiff.exe
  • 登录事件的触发器(Service Pack 2中的新增功能)
  • 使用持久计算列(pcc)提升性能.
  • sys.database_principles中的DEFAULT_SCHEMA设置
  • 强制参数化
  • Vardecimal存储格式
  • 在几秒钟内找出最受欢迎的查询
  • 可扩展的共享数据库
  • SQL Management Studio中的表/存储过程过滤器功能
  • 跟踪标志
  • GO重复批次后的数字
  • 使用模式的安全性
  • 使用内置加密函数,视图和带触发器的基表进行加密

t-sql sql-server

215
推荐指数
35
解决办法
6万
查看次数

为什么(以及如何)使用master..spt_values拆分列?

将问题的答案分解为"一列拆分为多行",我在此重新编写为[1].

什么是(含义)Type = 'P'以及为什么使用未记录的master..spt_values来拆分列?它有什么好处?


[1]

CREATE TABLE dbo.Table1 
(
    Col1        CHAR(1),
    Col2        CHAR(1),
    Col3        CHAR(1),
    Col4        VARCHAR(50)
)
GO

INSERT INTO dbo.Table1 VALUES ('A','B','C','1,2,3')
GO
INSERT INTO dbo.Table1 VALUES ('D','E','F','6,7,8,9')
GO


SELECT
    T.col1, RIGHT(LEFT(T.col4,Number-1),
    CHARINDEX(',',REVERSE(LEFT(','+T.col4,Number-1))))
FROM
    master..spt_values,
    table1 T
WHERE
    Type = 'P' AND Number BETWEEN 1 AND LEN(T.col4)+1 AND
    (SUBSTRING(T.col4,Number,1) = ','
    -- OR SUBSTRING(T.col4,Number,1)  = '') --this does not work correctly anyway
Run Code Online (Sandbox Code Playgroud)

相关问题:

sql t-sql sql-server database-design

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

SQL Server 2008生成一系列日期时间

我正在尝试生成一个包含一系列日期时间的表.

我有指定的开始日期时间和结束日期时间(结束日期时间是序列结束),我添加一个时间间隔〜(这可能会有所不同)到开始日期时间(以秒为单位),这给了我结束日期时间.

下一个序列使用结束日期时间作为其起始值,并以秒为单位添加时间间隔.为了证明我需要的输出.有没有一种快速的方法来创建这样的表,除了使用大量插入命令?,我真的很难过

StartTime               Endtime                 Duration
2011-07-20 11:00:33     2011-07-20 11:09:47     554
2011-07-20 11:09:47     2011-07-20 11:19:01     554

    declare @StartTime datetime = '2011-07-20 11:00:33',
    @EndTime datetime = '2011-07-20 15:37:34'
    @Interval int = 554 -- this can be changed.

    insert into tmp_IRange
    values('2011-07-20 11:00:33', DATEADD(SECONDS, @Duration, 2011-07-20 11:00:33))
Run Code Online (Sandbox Code Playgroud)

这变得非常繁琐..尤其是当结束日期时间2011-07-20 15:37:34 有很多插入语句时:(

t-sql sql-server datetime sql-server-2008

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

组关闭数字

我有一个包含2列整数的表.第一列表示起始索引,第二列表示结束索引.

START END
1     8
9     13
14    20
20    25
30    42
42    49
60    67
Run Code Online (Sandbox Code Playgroud)

简单到目前为止.我想要做的是将所有记录组合在一起:

START END
1     25
30    49
60    67
Run Code Online (Sandbox Code Playgroud)

记录可以跟在上一个结束索引的相同索引处开始,或者以1的边距开始:

START END
1     10
10    20
Run Code Online (Sandbox Code Playgroud)

START END
1     10
11    20
Run Code Online (Sandbox Code Playgroud)

将导致

START END
1     20
Run Code Online (Sandbox Code Playgroud)

我正在使用SQL Server 2008 R2.

任何帮助都会很棒

sql sql-server sql-server-2008 gaps-and-islands

11
推荐指数
1
解决办法
369
查看次数

SQL如何将具有日期范围的行转换为每个日期的多行

如果我有一个看起来像这样的表

begin date      end date        data
 2013-01-01     2013-01-04       7
 2013-01-05     2013-01-06       9
Run Code Online (Sandbox Code Playgroud)

如何让它像这样返回......

    date         data
 2013-01-01       7
 2013-01-02       7
 2013-01-03       7
 2013-01-04       7
 2013-01-05       9
 2013-01-06       9
Run Code Online (Sandbox Code Playgroud)

我想做的一件事就是让另一个表只包含所有日期,然后使用date>=begin date和仅仅使用日期加入表中的表,date<=end date但是这似乎有点笨拙,只需重复日期就可以保留额外的表.

在某些情况下,我没有数据范围,只是一个as of日期基本上看起来像我的第一个例子,但没有end date.该end date由下一行的"作为"日暗示(即结束日期应该是下一行的as of-1).我有一个"解决方案",它使用row_number()函数来获取下一个值但我怀疑这种方法,我正在做的方式有一堆嵌套的自联接,这导致非常长的查询时间.

sql sql-server-2008-r2

7
推荐指数
1
解决办法
8147
查看次数

在午夜分割时间记录

我正在尝试运行一些报告,并且必须处理整个员工劳动时间跨越午夜的问题.虽然我可以将午夜时分的记录拆分成两条记录,好像雇员在午夜时钟退出并同时在午夜时钟回来,从而完全避开了午夜问题.

所以,如果我有:

EmployeeId   InTime                     OutTime
---          -----------------------    -----------------------
1            2012-01-18 19:50:04.437    2012-01-19 03:30:02.433
Run Code Online (Sandbox Code Playgroud)

你认为如何分割这条记录是最优雅的方式:

EmployeeId   InTime                     OutTime
---          -----------------------    -----------------------
1            2012-01-18 19:50:04.437    2012-01-19 00:00:00.000
1            2012-01-19 00:00:00.000    2012-01-19 03:30:02.433
Run Code Online (Sandbox Code Playgroud)

是的,我已经彻底考虑了这可能会对现有功能产生什么影响......这就是为什么我选择在不影响现有功能的临时表中执行此操作的原因.

sql sql-server-2008

6
推荐指数
1
解决办法
2428
查看次数

根据日期范围汇总每月的天数

作为一名C#开发人员,在尝试创建基于T-SQL的纯解决方案时遇到一系列日期范围涉及总结日/月的问题时,我正在摸不着头脑.

我有一组数据看起来像这样:

UserID  Department  StartDate   EndDate
======  ==========  ==========  ==========
1       A           2011-01-02  2011-01-05
1       A           2011-01-20  2011-01-25
1       A           2011-02-25  2011-03-05
1       B           2011-01-21  2011-01-22
2       A           2011-01-01  2011-01-20
3       C           2011-01-01  2011-02-03
Run Code Online (Sandbox Code Playgroud)

日期范围不重叠,可能跨越几个月,特定用户和部门可能在一个月内存在多个范围.我想要做的是总结每个用户,部门,年和月的天数(包括),像这样(在我的例子中保留任何数学错误......):

UserID  Department  Year  Month  Days
======  ==========  ====  =====  ====
1       A           2011  01     10
1       A           2011  02     4
1       A           2011  03     5
1       B           2011  01     2
2       A           2011  01     20
3       C           2011  01     31
3       C           2011  02     3 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql

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

t-sql使用csv字符串查找特定值

我需要一些帮助SQL查询.我有一个列的值存储为逗号分隔值.

我需要编写一个查询,查找列中每个值中的第3个分隔项.

这可以在Select语句中执行此操作吗?例如:ColumnValue:josh,Reg01,False,a0-t0,22/09/2010

所以我需要False从上面的字符串中获取第3个值(即).

sql t-sql csv parsing

4
推荐指数
1
解决办法
2545
查看次数

如何插入多行 - 需要一个循环?

我有以下声明:

insert into forecast_entry.user_role_xref
        ( user_master_id ,
          role_id ,
          created_date ,
          created_by
        )
values
        ( 276 , -- user_master_id - int
          101 , -- role_id - int
          getdate() , -- created_date - datetime
          'MICHAELSK'  -- created_by - varchar(20)
        )
Run Code Online (Sandbox Code Playgroud)

我需要为role_id 101-355生成一行(所以上面的语句相同,除了使用role_id递增重复).最好的方法是什么?为了完成工作,我打算编写一个快速的C#应用​​程序,它将有一个循环,但我确信这不是最好的方法,并希望在这里学到一些东西,以避免将来这样做(因为我'我确定这种情况很常见).

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

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

T-SQL中的汉明重量/人口计数

我正在寻找一种计算BINARY(1024)字段的汉明权重/人口计数/“ 1位数”的快速方法。MySQL有一个类似的BIT_COUNT函数。我在T-SQL中找不到类似的功能?

还是建议将二进制数据存储在其他类型的字段中?

如果您不知道我在说什么,这是Wikipedia上有关海明重量的文章

sql sql-server binary hammingweight population

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

在 SQL 中创建从 n 到 1 的范围


我需要创建一个从 1 到 n 的范围号。
例如,参数是@StartingValue

@StartingValue int = 96
Run Code Online (Sandbox Code Playgroud)

那么结果应该是:

Number
-------------
96
95
94
93
92
ff.
1
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?
谢谢。

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

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

返回接下来的 10 天,包括工作日名称

寻找一个查询或函数,对于给定的日期,它将返回接下来的 10 天(包括给定的日期作为参数)作为两列: - 日期 - 工作日名称

我正在使用 SQL Server 2019。

更新(@Dale K):我已经计算了日期和工作日,但这些是作为两个单独的查询和新行而不是多行

declare @mydate datetime
set @mydate = '2020-1-1'

select @mydate + 0, @mydate + 1, @mydate + 2, @mydate + 3, @mydate + 4, @mydate + 5, @mydate + 6

select
datename(dw, @mydate + 0),
datename(dw, @mydate + 1),
datename(dw, @mydate + 2),
datename(dw, @mydate + 3),
datename(dw, @mydate + 4),
datename(dw, @mydate + 5),
datename(dw, @mydate + 6)
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

0
推荐指数
1
解决办法
655
查看次数