标签: t-sql

使用 Row_Number 查找连续行数

我有一列整数表示信号的发生,我正在尝试添加一列显示连续行的计数

如果我的数据看起来像这样

724
727
728
733
735
737
743
747
749
Run Code Online (Sandbox Code Playgroud)

具有连续行计数列的结果数据将如下所示

724 1
727 1
728 2
729 3
735 1
737 1
743 1
744 2
748 1
Run Code Online (Sandbox Code Playgroud)

我已经使用循环函数完成了它,但我正在尝试使用 cte。这是我最近尝试的示例

DECLARE @d TABLE ( signal INT )
INSERT  INTO @d
        SELECT  724
        UNION
        SELECT  727
        UNION
        SELECT  728
        UNION
        SELECT  729
        UNION
        SELECT  735
        UNION
        SELECT  737
        UNION
        SELECT  743
        UNION
        SELECT  744
        UNION
        SELECT  748 ;
WITH    a AS ( SELECT   signal,
                        ROW_NUMBER() OVER ( ORDER BY …
Run Code Online (Sandbox Code Playgroud)

t-sql gaps-and-islands

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

元素名称的变量

我有这个 tSQL 代码可以正常工作:

SELECT 
c.logguid,
a.b.value('./PropertyValue', 'varchar(max)') asd
  FROM [dnn].[dbo].[EventLog2] c

cross apply sss.nodes('/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")]') as a(b)
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够做的是传入许多对值的动态列表,这些值对在每个值之间进行 OR 运算,即

SELECT 
c.logguid,
a.b.value('./PropertyValue', 'varchar(max)') asd
  FROM [dnn].[dbo].[EventLog2] c

cross apply sss.nodes(
'/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")
or
PropertyName=sql:variable("@a") and PropertyValue=sql:variable("@b")
]'
) as a(b)
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

xml t-sql

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

选择具有相同 id 但为空的行,以及该 id 的另一列中的一些其他值

我只想获取具有值NULL和其他值而不是NULL特定用户名列的行。

如果该特定用户名的两行都为 null,或者两者都有一些非 null 的值,则它不应出现在输出中。如果同一个用户名有两行以上的空值和一些其他值,那么它们应该出现。

下面是示例示例和输出。如何使用 sql 查询来完成?

+----------+-------+
| username | col2  |
+----------+-------+
| a        | abc   |
| a        | ef    |
| b        | null  |
| b        | null  |
| c        | der   |
| c        | null  |
+----------+-------+
Run Code Online (Sandbox Code Playgroud)

输出

+----------+------+
| username | col2 |
+----------+------+
| c        | der  |
| c        | null |
+----------+------+
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

在 SQL Server 中连接字符串的最有效方法是什么?

我有这个代码:

DECLARE @MyTable AS TABLE
(
   [Month] INT,
   Salary INT
);

INSERT INTO @MyTable VALUES (1,2000), (1,3100);

SELECT [Month], Salary FROM @MyTable;
Run Code Online (Sandbox Code Playgroud)

输出:

表格图形

我想NVARCHAR合并工资(按月分组),这样它就会是这样的:'2000,3100'

我将如何有效地做到这一点?

sql-server aggregate t-sql concat

9
推荐指数
2
解决办法
3523
查看次数

我想在不切换数据库的情况下将用户/登录名添加到另一个数据库中的角色

我有一个“新”的数据库角色/登录mynewdb与角色"emailsender"。我已经编写了一个配置文件,sp_send_dbmail现在正在尝试编写将登录名添加到DatabaseMailUserRolein 的脚本,msdb并且似乎在绕圈子。重要的是,我想在mynewdb. 我知道我可以SSMS用来做到这一点。问题是:

如何编写脚本将用户T-SQLmynewdb数据库添加到角色中而不切换到msdb

sql-server role t-sql

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

列出 SQL Server 实例启动参数

我有一台刚刚重新启动的服务器,并使用以下命令验证了哪些跟踪标志处于活动状态DBCC TRACESTATUS

在此处输入图片说明

跟踪标志:3688 功能:将有关跟踪开始和停止的消息删除到错误日志

在这里您可以看到每个跟踪标志的作用。

标记 3688

启动参数如下:

在此处输入图片说明

题:

如何通过 T-SQL 找到 SQL Server 服务的启动参数?

sql-server t-sql configuration sql-server-2014

9
推荐指数
2
解决办法
9858
查看次数

我是否在 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 之后添加已提交的读取?

在存储过程中,我有以下内容:( sql server 2008 )

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH
Run Code Online (Sandbox Code Playgroud)

由于这是基于事务的,我认为其余的数据库连接不会受到 SERIALIZABLE 的影响。

我是否需要隐式设置隔离级别以在提交后读取已提交?这是否会对我的应用程序服务器和数据库服务器之间的其他连接产生不利影响?

t-sql transaction isolation-level

9
推荐指数
2
解决办法
1190
查看次数

SSMS 和注册服务器结果

背景

我们正在尝试为我们的一个支持团队创建一个 AG“是主要的”测试工具。不知道在任何给定时间哪些服务器将是主服务器,它们被指示对注册的服务器组执行 TSQL。注册服务器组由AG中的所有服务器组成。目标是只在当前主服务器上执行 TSQL:

当前测试线束

IF EXISTS (SELECT *
FROM sys.dm_hadr_availability_replica_states AS HARS 
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS HACS ON HACS.replica_id = HARS.replica_id 
    WHERE (HARS.role_desc = 'PRIMARY') AND (HACS.replica_server_name LIKE @@SERVERNAME))
BEGIN
<<SOME CODE TO EXECUTE>>
END
Run Code Online (Sandbox Code Playgroud)

问题

如果响应多服务器查询的第一台服务器没有返回任何结果,SSMS 将假定正确的结果集没有结果集,即使其他服务器稍后返回结果集也是如此。因此,在这种情况下,不会返回任何结果……这是不正确的,也不是预期的功能。

谁能想出一种方法,使用 SSMS(这是 CS 团队最熟悉的工具),仅在当前主服务器上强制执行?

sql-server ssms t-sql

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

如何将 TempDB 文件移动到不同的驱动器或文件夹?

如何将我的TempDB 数据或日志文件从现在的任何位置移动到不同的驱动器或文件夹

sql-server t-sql tempdb datafile

9
推荐指数
2
解决办法
5616
查看次数

如何透视 SQL Server 中的多个列?

将表格“展平”成单行的最佳方法是什么?

例如,使用下表:

+-----+-------+-------------+------------------+
| Id  | hProp | iDayOfMonth | dblTargetPercent |
+-----+-------+-------------+------------------+
| 117 |    10 |           5 |           0.1400 |
| 118 |    10 |          10 |           0.0500 |
| 119 |    10 |          15 |           0.0100 |
| 120 |    10 |          20 |           0.0100 |
+-----+-------+-------------+------------------+
Run Code Online (Sandbox Code Playgroud)

我想生成下表:

+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
| hProp | iDateTarget1 | dblPercentTarget1 | iDateTarget2 | dblPercentTarget2 | iDateTarget3 | dblPercentTarget3 | iDateTarget4 | dblPercentTarget4 |
+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
|    10 |            5 |              0.14 |           10 …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot t-sql

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