标签: sql-server

CONCAT'ing NULL字段

我有一个包含三个字段的表,FirstName,LastName和Email.

这是一些虚拟数据:

FirstName | LastName | Email
Adam        West       adam@west.com
Joe         Schmoe     NULL
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做:

SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
Run Code Online (Sandbox Code Playgroud)

Joe的Vitals为null,因为只有一个空字段.你是如何克服这种行为的?此外,这是MS SQL Server中的默认行为吗?

sql sql-server concatenation

59
推荐指数
5
解决办法
8万
查看次数

我为什么要在C#中使用int而不是字节或short

我找到了一些关于这个问题的线索.大多数人似乎倾向于在他们的c#代码中使用int,即使一个字节或一个smallint处理数据,除非它是一个移动应用程序.我不明白为什么.将C#数据类型定义为数据存储解决方案中的相同数据类型是否更有意义?

我的前提:如果我使用的是类型化的数据集,Linq2SQL类,POCO,无论如何我都会遇到编译器数据类型转换问题,如果我不保持我的数据类型在我的层之间保持同步.我真的不喜欢一直在做System.Convert,因为在c#代码中使用int更容易.我总是使用任何最小的数据类型来处理数据库和代码中的数据,以保持我的数据库接口干净.所以我敢打赌,75%的C#代码使用byte或short而不是int,因为这就是数据库中的内容.

可能性:这是否意味着大多数只为代码中的所有东西使用int的人也使用int数据类型作为他们的sql存储数据类型,并且可能不太关心他们的数据库的整体大小,或者他们是否在适当的情况下在代码中执行system.convert?

为什么我关心:我一直在努力工作,我只想熟悉最佳实践和标准编码惯例.

c# sql-server asp.net types

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

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

检查字符串是否包含其他字符串

在T-SQL中,如何检查字符串是否包含另一个字符串?

我有一个nvarchar可能是"橘子苹果".

我想做一个更新,例如,columm 包含"Apples".

如何才能做到这一点?

t-sql sql-server string

59
推荐指数
4
解决办法
13万
查看次数

如何解决间歇性SQL超时错误

我们每天都有一些实例,我们从多个应用程序中获得大量SQL Timeout错误(System.Data.SqlClient.SqlException:Timeout expired.在操作完成之前已经过了超时时间,或者服务器没有响应.)我们的网络上有超过100种不同的应用程序,包括Web和桌面应用程序.从VB6和经典ASP到.NET 4的所有内容.我可以找到显示副作用的各种数据,但无法确定导致这种情况的原因.我们的DBA表示SQL服务器没有任何问题,IT部门表示Web服务器或网络没有任何问题,所以我当然试图解决这个问题.

我真的只是在寻找有关我可以做的其他故障排除的建议,以尝试跟踪此问题.

我们在群集中运行SQL Server 2008 R2.有几个不同的服务器连接到它,从Windows服务器2003到2008不同的品种.

这是我到目前为止所做的:

  • 运行长时间运行的查询和死锁的SQL跟踪. 这显示在问题出现时没有死锁,长时间运行的查询都与我们的超时错误一致,但看起来是副作用,而不是原因.通常立即返回的非常基本的查询最终会花费30,60或120秒来运行.这种情况发生了几分钟,然后一切都恢复并在此之后正常工作.
  • 使用性能监视器来跟踪连接池连接. 这有时会显示超时时间附近的连接数量出现一些峰值,但仍然不会达到默认的100连接限制的一半.再说一遍,这里没有什么似乎指向一个原因.
  • 将Web应用程序分隔到不同的应用程序池中. 我们试图缩小我们认为可能是主要问题的应用程序(最常见的等等)并将它们放在单独的应用程序池中,但这似乎不会影响任何事情或帮助我们缩小范围.
  • 监视SQL Server上的磁盘使用情况.我们已经对SQL服务器进行了一些监控,并且在发生这些超时时看不到尖峰或任何问题迹象.
  • 已验证的TempDB不是问题的原因.

如果我想到我们尝试了什么,我会回来再增加更多.请让我知道接下来要解决的问题.

.net sql sql-server timeout sql-server-2008

59
推荐指数
4
解决办法
10万
查看次数

将表数据从一个SQL Server导出到另一个SQL Server

我有两个SQL Server(都是2005版).

我想将几个表从一个表迁移到另一个表.

我试过了:

  • 在源服务器上,我右键单击了所选的数据库Tasks/Generate scripts.问题是Table/View options没有Script data选择.

  • 然后我用来Script Table As/Create script生成SQL文件,以便在我的目标服务器上创建表.但我仍然需要所有的数据.

然后我尝试使用:

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table]
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

对象包含的前缀数量超过最大数量.最大值为2.

有人可以指出我解决问题的正确方法吗?

sql sql-server export sql-server-2005

59
推荐指数
6
解决办法
21万
查看次数

当触发器在表上时,不能将UPDATE与OUTPUT子句一起使用

我执行UPDATEOUTPUT查询:

UPDATE BatchReports
SET IsProcessed = 1
OUTPUT inserted.BatchFileXml, inserted.ResponseFileXml, deleted.ProcessedDate
WHERE BatchReports.BatchReportGUID = @someGuid
Run Code Online (Sandbox Code Playgroud)

这句话很好,很好; 直到在表上定义了一个触发器.然后我的UPDATE陈述将得到错误334:

如果语句包含没有INTO子句的OUTPUT子句,则DML语句的目标表'BatchReports'不能具有任何已启用的触发器

现在,SQL Server团队博客文章中解释了这个问题:

错误消息是不言自明的

他们还提供解决方案:

该应用程序已更改为使用INTO子句

除了我无法做出整篇博文的正面或反面.

所以让我问一下我的问题:我应该改变什么UPDATE才能使它有效?

也可以看看

sql sql-server sql-server-2008-r2

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

SQL Server中的条件WHERE子句

我正在创建一个SQL查询,我需要一个条件where子句.

它应该是这样的:

SELECT 
    DateAppr,
    TimeAppr,
    TAT,
    LaserLTR,
    Permit,
    LtrPrinter,
    JobName,
    JobNumber,
    JobDesc,
    ActQty,
    (ActQty-LtrPrinted) AS L,
    (ActQty-QtyInserted) AS M,
    ((ActQty-LtrPrinted)-(ActQty-QtyInserted)) AS N
FROM 
    [test].[dbo].[MM]
WHERE 
    DateDropped = 0
            --This is where i need the conditional clause 
    AND CASE
            WHEN @JobsOnHold = 1 THEN DateAppr >=  0
            ELSE  DateAppr != 0
        END
Run Code Online (Sandbox Code Playgroud)

以上查询无效.这不是正确的语法,还是有其他方法可以做到这一点,我不知道?

我不想使用动态SQL,所以有没有其他方法或我必须使用一个解决方法,如使用if else和使用不同的where子句相同的查询?

sql t-sql sql-server where-clause sql-server-2008

59
推荐指数
5
解决办法
12万
查看次数

如何获取所有数据库用户的列表

我将获得所有用户的列表,包括Windows用户和"sa",他们可以访问MS SQL Server中的特定数据库.基本上,我希望列表看起来像显示的内容SQL Server Management Studio(即展开时显示的列表[databse] -> Security -> Users),但有一个重要的例外:我不想'dbo'在列表中看到它.相反,我希望看到拥有数据库的实际用户.因此,例如,如果'sa'是'dbo',则'sa'必须包含在列表中而不是'dbo'.另一个不容错过的注意事项是,SQL Server Management Studio除了SQL用户之外,通常还会显示Windows用户中的列表,并且我希望也包含这些用户.

到目前为止,我已经能够提出以下查询:

SELECT * FROM sys.database_principals where (type='S' or type = 'U')
Run Code Online (Sandbox Code Playgroud)

这个查询几乎是正确的,但问题是它不满足'dbo'条件.

如何更改此查询或应该使用其他查询?

sql-server

59
推荐指数
5
解决办法
38万
查看次数

如何在MIN或MAX中包含空值?

我有一个表,我正在存储时间跨度数据.该表的架构类似于:

ID INT NOT NULL IDENTITY(1,1)   
RecordID INT NOT NULL  
StartDate DATE NOT NULL  
EndDate DATE NULL  
Run Code Online (Sandbox Code Playgroud)

我正在尝试计算每个记录ID的开始和结束日期,因此最小StartDate和最大EndDate.StartDate不可空,所以我不需要担心这个,但我需要MAX(EndDate)来表示这是一个正在运行的时间跨度.

保持EndDate的NULL值并将其视为最大值非常重要.

最简单的尝试(下面)无法突出显示MIN和MAX将忽略NULLS的问题(来源:http://technet.microsoft.com/en-us/library/ms179916.aspx).

SELECT recordid, MIN(startdate), MAX(enddate) FROM tmp GROUP BY recordid
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个基本设置完成的SQL小提琴.

http://sqlfiddle.com/#!3/b0a75

如何根据我的意愿弯曲SQL Server 2008以从SQLFiddle中给出的数据产生以下结果?

RecordId  Start       End  
1         2009-06-19  NULL
2         2012-05-06  NULL
3         2013-01-25  NULL
4         2004-05-06  2009-12-01
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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