小编M.A*_*Ali的帖子

SQL Server显式事务行为

我刚刚做了一个SQL考试,我真的很难处理2个关于交易的问题,它已经提交了,所以这只是为了我的理智......这些问题的答案是什么?

对不起,如果这不应该在这里,或者这些应该是2个单独的问题.

1.

Employee X has a salary of 40,000
a. User A begins a transaction and updates employee X's salary to salary * 1.1
b. User B begins a transaction and updates employee X's salary to salary * 1.25
c. User A rolls back their transaction
d. User B commits their transaction
Run Code Online (Sandbox Code Playgroud)

什么是员工X的薪水?(我去了50,000,没有提到事务隔离级别)

2.脚本构建如下 -

a. Transaction start
b. Insert record into table 1
c. Create savepoint
d. Insert record into table 2
e. Rollback to the save point …
Run Code Online (Sandbox Code Playgroud)

sql sql-server transactions

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

从所有列获取Last NOT NULL值

我有一种情况,我试图从所有列中获取最后一个not null值.这里有一些数据用于演示目的.

测试数据

DECLARE @t TABLE (ID INT, Col1 INT, Col2 INT, Col3 INT, Dated DATETIME)
INSERT INTO @t VALUES
(1, NULL, 100  , NULL, '20131210'),  --<-- Column2 from this row
(1, 20  , 200  , NULL, '20131209'),  --<-- Column1 from this row
(1, 30  , NULL , 300 , '20131208'),  --<-- Column3 from this row
(1, 40  , 400  , NULL, '20131207')

?????????????????????????????????????????????????????
? ID ? Col1 ? Col2 ? Col3 ?          Dated          ?
?????????????????????????????????????????????????????
?  1 ? NULL …
Run Code Online (Sandbox Code Playgroud)

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

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

动态PIVOT,从两个表的JOIN返回结果

我认为是一个相当简单的查询似乎比我预期的更棘手.

我有两张桌子.与一对多的关系.我想要做的是表2返回的任何记录,我希望它在一个单独的列中.我已经设法在以下查询中使用相对较小的数据并知道第二个表返回的内容.

样本数据

DECLARE @TABLE1 TABLE(UserID INT,Episode INT ,[Value] VARCHAR(100))
INSERT INTO @TABLE1 VALUES
(1, 1,'VALUE 1-1'),(1, 2,'VALUE 1-2')

DECLARE @TABLE2 TABLE(UserID INT,Episode INT ,[Details] VARCHAR(100))
INSERT INTO @TABLE2 VALUES
(1, 1,'Details 1'),(1, 1,'Details 2'),(1, 2,'Details 1'),(1, 2,'Details 2') 
Run Code Online (Sandbox Code Playgroud)

简单加入

SELECT  ONE.UserID
      , ONE.Episode
      , ONE.Value
      , TWO.Details 
FROM @TABLE1 ONE INNER JOIN @TABLE2 Two
ON ONE.UserID = TWO.UserID 
AND ONE.Episode = TWO.Episode

????????????????????????????????????????????
? UserID ? Episode ?   Value   ?  Details  ?
????????????????????????????????????????????
?      1 ?       1 ? VALUE …
Run Code Online (Sandbox Code Playgroud)

sql sql-server pivot sql-server-2008

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

如何将多行合并为一行?

我正在使用 SSMS 2008 R2,并且只是尝试将多行合并为一行。我认为这应该很简单,但目前它在每一行中重复数据。考虑:

create table test
(
Name varchar(30)
)
insert test values('A'),('B'),('C')
select * from test

select distinct Name, coalesce(Name + ', ', '')
from test 
Run Code Online (Sandbox Code Playgroud)

我怎样才能重写它来实现一行:A,B,C

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

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

tSQLt Private_RunTest中还有一个ROLLBACK ERROR

每当我使用ExpectException时,我收到以下错误:(还有一个ROLLBACK错误 - >当前事务无法提交,无法回滚到保存点.回滚整个事务.{Private_RunTest,140})

看来,由于RAISERROR,MSSQL已经执行了ROLLBACK,因此tSQLt正在尝试ROLLBACK.我裹着Private_RunTest下面的SELECT和SET语句与以下IF语句和它似乎解决问题.

IF ISNULL(@ExpectException,0) <> 1 
  BEGIN
    SELECT @Msg = COALESCE(@Msg, '') + ' (There was also a ROLLBACK ERROR --> ' + 
                  COALESCE(ERROR_MESSAGE(), '') + '{' + 
                  COALESCE(ERROR_PROCEDURE(), '') + ',' + 
                  COALESCE(CAST(ERROR_LINE() AS NVARCHAR), '') + '})';
    SET @Result = 'Error';
  END
Run Code Online (Sandbox Code Playgroud)

这真的是一个错误和/或一个适当的修复?

sql-server tsqlt

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

如何通过TSQL从SQL Server查询生成JSON字符串?

我想知道是否有任何函数或东西可以将SQL select查询结果转换为JSON字符串格式?

例如,SQL选择查询结果是,

current   target
-----------------
  500      1000
  1500     2000
Run Code Online (Sandbox Code Playgroud)

JSON结果:

[{"current":500,"target":1000},{"current":1500,"target":2000}]
Run Code Online (Sandbox Code Playgroud)

任何想法都会有所帮助。

谢谢。

t-sql sql-server json

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

SQL WHERE IN子查询返回以逗号分隔的列表

假设我在SQL表(Locations)中有一个字段,其值是以分号分隔的列表:

username1;username2;username3
Run Code Online (Sandbox Code Playgroud)

如果我说:

SELECT '''' + REPLACE(owners, ';', ''',''') + '''' FROM Locations WHERE ...
Run Code Online (Sandbox Code Playgroud)

我可以输出它:

'username1','username2','username3'
Run Code Online (Sandbox Code Playgroud)

...但我想要做的是在子查询中使用它:

SELECT * FROM Users WHERE UserName IN (   
    SELECT '''' + REPLACE(owners, ';', ''',''') + '''' 
    FROM Locations WHERE ...
)
Run Code Online (Sandbox Code Playgroud)

所以,基本上我希望该子查询的输出在IN()子句中充当字符串.这可能吗?

谢谢!

sql sql-server

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

如何在 ssrs 中显示组的小计和总计

我正在制作以下格式的 SSRS 报告:

DIVISION  
      SECTOR  
            DEPARTMENT
Run Code Online (Sandbox Code Playgroud)

部门包含部门,部门包含部门,因此生成的报告变成如下所示。每个部门都显示一个数字,我想在部门列中显示每个部门的小计(通过添加所有部门),然后在最后显示部门的总和(通过添加所有部门或所有部门)。我如何显示这些总数?

Division1
     Sector1               SUBTOTAL HERE (for e.g. 19,000)
          Department1      10,000
          Department2      9,000
     Sector2               SUBTOTAL HERE  (for e.g. 8,000)
          Department3      8,000
     Sector3               SUBTOTAL HERE  (for e.g. 13,000)
          Department4      10,000
          Department5      1,000
          Department6      2,000
                           TOTAL HERE  (for e.g. 40,000)
Division2
     Sector4               SUBTOTAL HERE (for e.g. 3,500)
          Department7      3,500
                           TOTAL HERE (for e.g. 3,500)
Run Code Online (Sandbox Code Playgroud)

我的报告显示了所有部门、部门和部门,上面的数字如上(我使用的是组),但我如何显示小计和总计?

sql-server reporting-services ssrs-2012

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

使用WHERE子句与GROUP BY进行LEFT JOIN,并在sql中使用OR进行LEFT JOIN

我有3个表: 表1 - "taxonomy_index"我们有4列(列是nid,tid,粘,创建)

表2 - "节点"我们有15列(列是nid,vid,类型等...)

表3 - "taxonomy_term_data",其中我们有6列(列是tid,vid,名称等..)

我想加入这3张桌子,还有一些条件.

我知道各个查询但我想将所有查询设置为一个并形成一个连接

查询1

SELECT count(*), tid 
FROM taxonomy_index 
GROUP BY tid HAVING COUNT(*) >3
Run Code Online (Sandbox Code Playgroud)

这个查询给了我两个值,一个是count,另一个是tid.即tid使用了多少次.

查询2

select * 
from node 
where type='book' OR type='student' 
OR type='teacher' OR type='class';
Run Code Online (Sandbox Code Playgroud)

在这里,我将获得与这些内容类型相关联的节点.

我想加入3个表.在输出中,我想知道每个tid使用了多少次(查询1)和类型(查询2),并从taxonomy_term_data获取tid名称.

计数,tid,命名给定类型的位置

mysql sql-server join

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