我有一个包含三个字段的表,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中的默认行为吗?
我找到了一些关于这个问题的线索.大多数人似乎倾向于在他们的c#代码中使用int,即使一个字节或一个smallint处理数据,除非它是一个移动应用程序.我不明白为什么.将C#数据类型定义为数据存储解决方案中的相同数据类型是否更有意义?
我的前提:如果我使用的是类型化的数据集,Linq2SQL类,POCO,无论如何我都会遇到编译器数据类型转换问题,如果我不保持我的数据类型在我的层之间保持同步.我真的不喜欢一直在做System.Convert,因为在c#代码中使用int更容易.我总是使用任何最小的数据类型来处理数据库和代码中的数据,以保持我的数据库接口干净.所以我敢打赌,75%的C#代码使用byte或short而不是int,因为这就是数据库中的内容.
可能性:这是否意味着大多数只为代码中的所有东西使用int的人也使用int数据类型作为他们的sql存储数据类型,并且可能不太关心他们的数据库的整体大小,或者他们是否在适当的情况下在代码中执行system.convert?
为什么我关心:我一直在努力工作,我只想熟悉最佳实践和标准编码惯例.
在T-SQL中,如何检查字符串是否包含另一个字符串?
我有一个nvarchar可能是"橘子苹果".
我想做一个更新,例如,columm 不包含"Apples".
如何才能做到这一点?
我们每天都有一些实例,我们从多个应用程序中获得大量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 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.
有人可以指出我解决问题的正确方法吗?
我执行UPDATE与OUTPUT查询:
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查询,我需要一个条件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子句相同的查询?
我将获得所有用户的列表,包括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'条件.
如何更改此查询或应该使用其他查询?
我有一个表,我正在存储时间跨度数据.该表的架构类似于:
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)