在高容量.NET应用程序中,您可能会在尝试执行查询时看到此异常:
System.Data.SqlClient.SqlException:将请求发送到服务器时发生传输级错误.
根据我的研究,这是"刚刚发生"的事情,并没有太多可以防止它.它不会因错误查询而发生,通常无法复制.当由于某种原因与数据库的TCP连接变坏时,它在繁忙的OLTP系统中可能每隔几天就会出现一次.
我被迫通过解析异常消息,然后从头开始重试整个操作来检测此错误,以包括使用新连接.这些都不是很好.
有人有任何替代解决方案吗?
我在SQL Server 2000中有一个存储过程,它基于参数值执行搜索.对于传入的其中一个参数,我需要一个不同的WHERE子句,具体取决于它的值 - 问题是3个值将在哪里MyColumn
IS NULL IS NOT NULLANY VALUE (NULL AND NOT NULL)(基本上没有WHERE条款)我在提出正确的语法方面遇到了一些心理障碍.这可以在一个选择语句中执行而不执行某些IF @parameter BEGIN ... END分支吗?
我将备份从SQL Server 2000还原到最新版本时出现以下错误消息.我不知道旧版本,现在我使用的是SQL Server 2012(11.0.3128.0).
错误消息是:
消息3169,级别16,状态1,服务器FF101,行1
数据库在运行版本8.00.0760的服务器上备份.该版本与此服务器不兼容,该服务器运行的是版本11.00.3128.在支持备份的服务器上还原数据库,或使用与此服务器兼容的备份.
我遇到了一个经典的问题,需要在sql 2000数据库的文本字段上进行字符串替换.这可能是整个列的更新或单个字段我不挑剔.
我已经找到了一些如何使用updatetext来实现它的例子,但它们往往是在存储过程中,有没有人知道包含在函数中的类似事情,所以我可以使用它,就像我通常使用Replace()一样.对于不知道的人来说,Replace()函数的问题在于它不支持文本字段.
编辑:我意识到我可能会使用varchar(8000),因此已将字段交换为此类型以解决问题.我从未找到真正的解决方案.
简单的问题,正如标题所示:
通过首先检查SP是否存在,删除SQL Server 2000中的存储过程(SP)的语法是什么?
请提供完整的代码.
是否可以为返回的结果定义排序顺序?
我希望排序顺序为"橙色","苹果","草莓",不是升序或降序.
我知道ORDER BY可以做ASC或DESC但是有一个DEFINED('orange','apple','strawberry')类型的东西?
这将在SQL Server 2000上运行.
看起来Enterprise Manager*生成的一些脚本(或者没有,它们无关紧要)创建了检查约束WITH NOCHECK.
现在,当任何人修改表时,SQL Server都会遇到失败的检查约束,并抛出错误.
我可以让SQL通过它的所有检查约束,并检查它们吗?
运行:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Run Code Online (Sandbox Code Playgroud)
只启用以前禁用的检查约束,它实际上不会检查它们.
*SQL Server 2000
sql-server sql-server-2000 database-integrity check-constraints sp-msforeachtable
我们的系统在SQL Server 2000上运行,我们正在准备升级到SQL Server 2008.我们有很多触发器代码,我们需要检测给定列中的更改,然后对该列进行操作已经改变.
显然,SQL Server提供了UPDATE()和COLUMNS_UPDATED()函数,但这些函数只告诉您SQL语句中涉及哪些列,而不是实际更改了哪些列.
要确定哪些列已更改,您需要类似于以下代码(对于支持NULL的列):
IF UPDATE(Col1)
SELECT @col1_changed = COUNT(*)
FROM Inserted i
INNER JOIN Deleted d ON i.Table_ID = d.Table_ID
WHERE ISNULL(i.Col1, '<unique null value>')
!= ISNULL(i.Col1, '<unique null value>')
Run Code Online (Sandbox Code Playgroud)
对于您有兴趣测试的每个列,都需要重复此代码.然后,您可以检查"已更改"值以确定是否执行昂贵的操作.当然,这段代码本身也存在问题,因为它只告诉您列中的至少一个值已经修改了所有行.
您可以使用以下内容测试单个UPDATE语句:
UPDATE Table SET Col1 = CASE WHEN i.Col1 = d.Col1
THEN Col1
ELSE dbo.fnTransform(Col1) END
FROM Inserted i
INNER JOIN Deleted d ON i.Table_ID = d.Table_ID
Run Code Online (Sandbox Code Playgroud)
...但是当您需要调用存储过程时,这不起作用.在这些情况下,就我所知,你必须依靠其他方法.
我的问题是,是否有人有关于在触发器中预测数据库操作的问题的最佳/最便宜的方法是什么最好/最便宜的方法是关于修改行中的特定列值是否实际已经改变或者不.上述两种方法都不合理,我想知道是否存在更好的方法.
t-sql sql-server performance sql-server-2000 sql-server-2008
任何人都可以在此查询中找到我的错误?我正在使用SQL Server 2000,我想将CostEntry表中的所有条目更新为ActiveCostDetails表中的相应值.where子句可以使用select语句.
UPDATE CostEntry CE
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID
SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber
WHERE CostEntry.SEmployeeCode = '002'
AND SubString(CostCentre, 1, 1) = sDepartmentCode
AND substring(CostCentre, 3, 1) = sCategoryCode
AND substring(CostCentre, 5, 2) = sOperationCode
Run Code Online (Sandbox Code Playgroud) 我有一张发票表和一张与钥匙有关的相关数据的子表.特别是,对于每个发票,我只对子表中的第一个相关行感兴趣.鉴于我希望每个发票密钥都有一个相关的行 - 我该如何做到这一点?
Select i.[Invoice Number],
c.[Carrier Name]
From Invoice i
Left Join Carriers c on i.[InvoiceKey] = c.[InvoiceKey]
Where -- what?
Run Code Online (Sandbox Code Playgroud)
我想在语义上讲,我正在寻找类似于概念的东西Top 1 c.CarrierName Group by InvoiceKey(或者如果在T-SQL中可能的话那将是什么概念.)
我考虑过在子查询上进行左连接,但这看起来效率不高.有没有人有任何T-SQL技巧来有效地实现这一目标?
编辑:对不起,伙计们,我忘了提到这是SQL Server 2000,所以虽然我将放弃当前SQL Server 2005/2008响应的投票,但我不敢接受它们.
sql-server-2000 ×10
sql-server ×9
t-sql ×5
sql ×3
ado.net ×1
c# ×1
performance ×1
sql-drop ×1
sql-order-by ×1
sql-update ×1