小编gbn*_*gbn的帖子

SQL Server错误处理:异常和数据库 - 客户端合同

我们是一个SQL Server数据库开发人员团队.我们的客户是C#/ ASP.NET,C#和Java Web服务,Java/Unix服务和一些Excel的混合包.

我们的客户端开发人员只使用我们提供的存储过程,我们希望(当然,合理的)他们将它们视为Web服务方法.

我们的一些客户端开发人员不喜欢SQL异常.他们用他们的语言理解他们,但他们不理解SQL在如何沟通问题方面受到限制.

我不只是指SQL错误,例如尝试将"bob"插入int列.

我还指的是例外,例如告诉他们参考值是错误的,或者数据已经改变,或者他们不能这样做,因为他的聚合不是零.

他们没有任何具体的替代方案:他们提到我们应该输出参数,但我们假设一个例外意味着"处理停止/回滚.

人们如何处理数据库 - 客户合同?通常或DB和客户端代码猴之间存在分离的地方.

编辑:

  • 我们专门使用SQL Server 2005 TRY/CATCH
  • 我们将回滚后的所有错误记录到异常表中
  • 我们担心我们的一些客户不会检查输出参数并假设一切正常.我们需要标记错误以供支持查看.
  • 一切都是例外......客户应该做一些消息解析来分离信息与错误.要将我们的异常与数据库引擎和调用错误分开,他们应该使用错误编号(我们当然都是50,000)

t-sql stored-procedures sql-server-2005 exception sql-server-2008

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

SSRS:如何计算真行

我有一个数据集的报告,其中包含一个包含布尔值的列.在表格页脚中,我想显示x / y其中x有多少行true以及y总共有多少行.

目前我有这个:

=Count(Fields!Transfered.Value).ToString() + " / " + CountRows().ToString()
Run Code Online (Sandbox Code Playgroud)

但第一部分与最后部分相同.然后我尝试了这个:

=Sum(Fields!Transfered.Value).ToString() + " / " + CountRows().ToString()
Run Code Online (Sandbox Code Playgroud)

但这会产生错误,我想我可以理解.我认为如果我将布尔值转换为数字,其中true为1且false为0,那么它可以很好地解决.但是我该怎么做呢?或者这是一个更聪明的方式一起完成这一切?

更新:现在也尝试过了

=Sum(CInt(Fields!Transfered.Value)).ToString() + " / " + CountRows().ToString()
Run Code Online (Sandbox Code Playgroud)

并得到了负面结果......哦

还找到了一种有效的方法,我将其作为答案发布.但我不会接受它作为答案,但是有人有更好的方法来做到这一点=)

vb.net sql-server reporting-services

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

使用C#和ASP.NET在E邮件附件中发送SQL报告

我正在尝试使用ASP.NET和C#从sql reportserver 2008发送报告作为电子邮件附件,直到现在我学会了如何在我的代码中获取PDF报告,现在我想要组合代码行

byte[] bytes = rview.ServerReport.Render(format, deviceInfo, out mimeType, out encoding, out extension, out streamids, out warnings);
Response.OutputStream.Write(bytes, 0, bytes.Length);
Attachment reportAttachment = new Attachment(Response.OutputStream.Write(bytes,0,bytes.Length),"ado"); //Here I go wrong
Run Code Online (Sandbox Code Playgroud)

Thanx提前

c# asp.net reporting-services

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

差异xp_sendmail和sp_send_dbmail proc

我可以问一下xp_sendmailsp_send_dbmailproc 之间的区别是什么?它们都向指定的收件人发送电子邮件,其中可能包含查询结果集附件.....

有什么不同?

sql-server sqlmail

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

比较两个T-SQL表的差异

我有同一数据库的两个实例。第一个数据库代表今天的数据,第二个数据库代表6个月前的数据。我需要找到特定表中条目子集的差异。

对于两个表中都有ID的条目,我想找到一种方法来仅查看不相同的行。

有任何想法吗?

谢谢

sql t-sql sql-server

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

存储过程和SqlCommand超时

如果我使用SqlCommand运行存储过程并且SqlCommand超时,StoredProc会继续执行还是在SqlCommand断开连接时强行退出?

c# sql sql-server timeout sqlcommand

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

在数据库中以原子方式标记并返回一组行

我正在编写一个后台服务,需要处理一系列作业,作为记录存储在sqlserver表中.该服务需要找到需要工作的最早的20个作业(where status = 'new'),标记它们(set status = 'processing'),运行它们,然后更新作业.

这是我需要帮助的第一部分.可能有多个线程同时访问数据库,我想确保"标记和返回"查询以原子方式或几乎原样运行.

这项服务将花费相对较少的时间来访问数据库,如果一个作业运行两次,它就不是世界末日,所以我可能会接受一小部分作业运行的概率,以提高代码的简单性.

做这个的最好方式是什么?我正在为我的数据层使用linq-to-sql,但我认为我必须为此调入t-sql.

sql sql-server concurrency linq-to-sql

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

使用"Like"函数比较同一表中的2列

我试图想出一种方法来查询同一个表中两个不同列中的值,其中结果集将指示columnB的值不包含columnA值的实例.

例如,我的"节点"表包含"NodeName"和"DNS"列.值应类似于以下内容:

NodeName    DNS
Router1     Router1.mydomain.com
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询来显示哪些行的DNS值不包含(或以NodeName字段的值开头).我认为查询应该具有类似于以下内容的功能,但显然我在这种情况下缺少关于使用"Like"的内容.

SELECT NodeName, DNS
WHERE DNS NOT LIKE 'NodeName%'
Run Code Online (Sandbox Code Playgroud)

我正在使用SQL Server 2005,任何建议都将非常感谢...... :)

sql sql-server sql-server-2005 pattern-matching

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

在mysql中插入非英语小数点

如何让mysql理解整数/浮点字段中的非英语小数点?

setLocale(LC_ALL, 'da_DK.ISO-8859-1');
Run Code Online (Sandbox Code Playgroud)

例如:

0,25 will be inserted as 0
0.25 will be inserted as 0.25
Run Code Online (Sandbox Code Playgroud)

php mysql

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

TSQL和多穗时的情况?

我有几个条件,结果应该是相同的.我搜索网络,发现这样的东西:

CASE ProductLine
     WHEN 'R' THEN 'Road'
     WHEN 'M' THEN 'Mountain'
     WHEN 'T' THEN 'Touring'
     WHEN 'S' THEN 'Other sale items'
     ELSE 'Not for sale'
  END
Run Code Online (Sandbox Code Playgroud)

这很好,但不是我需要的,对我来说更像R,M,T和S都有相同的结果,例如A,B,C,D没有.我该怎么做?我无法与OR连接,或者至少我没有设法:).这样的事可能吗?

CASE ProductLine
     WHEN 'R' OR 'M' OR ... THEN 'Road'
     ELSE 'Not for sale'
  END
Run Code Online (Sandbox Code Playgroud)

t-sql case-when

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