如何通过网络使用SQL Server 2005还原数据库备份?我记得以前做过这个,但是你必须做的事情有点奇怪.
考虑这个触发器:
ALTER TRIGGER myTrigger
ON someTable
AFTER INSERT
AS BEGIN
DELETE FROM someTable
WHERE ISNUMERIC(someField) = 1
END
Run Code Online (Sandbox Code Playgroud)
我有一张桌子,有桌子,我试图阻止人们插入不良记录.出于这个问题的目的,坏记录有一个字段"someField",它都是数字.
当然,正确的方法不是触发器,但我不控制源代码......只是SQL数据库.所以我无法阻止插入坏行,但我可以立即将其删除,这对我的需求来说已经足够了.
触发器有效,有一个问题......当它触发时,似乎永远不会删除刚刚插入的坏记录......它会删除任何旧的坏记录,但它不会删除刚刚插入的坏记录.所以通常会有一个糟糕的记录在没有删除,直到其他人出现并执行另一次INSERT.
这是我对触发器的理解中的问题吗?触发器运行时是否尚未提交新插入的行?
我想将对象(任何类型)保存到SQL Server 2005中的数据库中的字段中.是否可能?我是否必须将对象转换为某些内容,例如字节数组,并在检索时将其转换回来?
我们有一个大型数据库,我们有数据库端分页.这很快,在几分之一秒内从数百万条记录中返回50行的页面.
用户可以定义自己的排序,基本上选择要排序的列.列是动态的 - 一些具有数值,一些日期和一些文本.
虽然大多数按预期文本排序是愚蠢的.嗯,我说愚蠢,它对计算机有意义,但让用户感到沮丧.
例如,按字符串记录ID排序会产生如下内容:
rec1
rec10
rec14
rec2
rec20
rec3
rec4
Run Code Online (Sandbox Code Playgroud)
...等等.
我希望这个考虑到这个数字,所以:
rec1
rec2
rec3
rec4
rec10
rec14
rec20
Run Code Online (Sandbox Code Playgroud)
我无法控制输入(否则我只是在前导000中格式化)而且我不能依赖单一格式 - 有些类似于"{alpha code} - {dept code} - {rec id}".
我知道在C#中有几种方法可以做到这一点,但是不能拉下所有记录来对它们进行排序,因为这样会慢.
有谁知道在Sql server中快速应用自然排序的方法?
我们正在使用:
ROW_NUMBER() over (order by {field name} asc)
Run Code Online (Sandbox Code Playgroud)
然后我们就这样分页.
我们可以添加触发器,但我们不会.他们所有的输入都是参数化的,但是我无法改变格式 - 如果他们输入"rec2"和"rec10",他们希望它们就像那样,以自然的顺序返回.
我们有有效的用户输入,遵循不同客户的不同格式.
有人可能会去rec1,rec2,rec3,... rec100,rec101
而另一个可能会去:grp1rec1,grp1rec2,... grp20rec300,grp20rec301
当我说我们无法控制输入时,我的意思是我们不能强迫用户更改这些标准 - 它们有一个像grp1rec1的值,我不能将其重新格式化为grp01rec001,因为这会改变用于查找的内容和链接到外部系统.
这些格式变化很大,但通常是字母和数字的混合.
在C#中对它们进行排序很容易 - 只需将其分解{ "grp", 20, "rec", 301 },然后依次比较序列值.
但是,可能有数百万条记录并且数据被分页,我需要在SQL服务器上进行排序.
SQL服务器按值排序,而不是比较 - 在C#中我可以将值拆分为比较,但在SQL中我需要一些逻辑(非常快)获得一致排序的单个值.
@moebius - 你的答案可能会有效,但是为所有这些文本值添加排序键确实感觉像是一个丑陋的妥协.
如何在不使用存储过程的情况下将变量设置为select查询的结果?
我想做类似的事情:OOdate DATETIME
SET OOdate = Select OO.Date
FROM OLAP.OutageHours as OO
WHERE OO.OutageID = 1
Run Code Online (Sandbox Code Playgroud)
然后我想在此查询中使用OOdate:
SELECT COUNT(FF.HALID) from Outages.FaultsInOutages as OFIO
INNER join Faults.Faults as FF ON FF.HALID = OFIO.HALID
WHERE CONVERT(VARCHAR(10),OO.Date,126) = CONVERT(VARCHAR(10),FF.FaultDate,126))
AND
OFIO.OutageID = 1
Run Code Online (Sandbox Code Playgroud) 嗨,我有一个引用自己的表,我需要能够从给定的父ID中选择父级及其所有子记录.
我的表格如下:
ID | ParentID | Name
-----------------------
1 NULL A
2 1 B-1
3 1 B-2
4 2 C-1
5 2 C-2
Run Code Online (Sandbox Code Playgroud)
因此,对于上面的示例,我希望能够传入值1并获取上面的所有记录.
到目前为止,我已经提出了以下递归表值函数,但它没有按预期运行(只返回第一条记录).
CREATE FUNCTION [dbo].[SelectBranches]
(
@id INT
,@parentId INT
)
RETURNS @branchTable TABLE
(
ID INT
,ParentID INT
,Name INT
)
AS
BEGIN
IF @branchId IS NOT NULL BEGIN
INSERT INTO @branchTable
SELECT
ID
,ParentID
,Name
FROM
tblLinkAdvertiserCity
WHERE
ID = @id
END
INSERT INTO @branchTable
SELECT
br.ID
,br.ParentID
,br.Name
FROM
@branchTable b
CROSS APPLY
dbo.SelectBranches(NULL, …Run Code Online (Sandbox Code Playgroud) 我需要在一个1.2亿记录表中初始化一个值为-1的新字段.
Update table
set int_field = -1;
Run Code Online (Sandbox Code Playgroud)
我让它运行了5个小时才取消它.
我尝试运行它,事务级别设置为读取未提交的相同结果.
Recovery Model = Simple.
MS SQL Server 2005
Run Code Online (Sandbox Code Playgroud)
如何更快地完成这项工作?
在T-SQL中是否有任何常量,例如在其他一些语言中提供数据类型的最大值和最小值范围,例如int?
我有一个代码表,其中每一行都有一个上下范围列,我需要一个表示一个范围的条目,其中上限是int可以容纳的最大值(有点像一个hackish无穷大).我宁愿不对它进行硬编码,而是使用类似的东西SET UpperRange = int.Max
sql-server-2005 ×10
sql-server ×9
sql ×4
ado.net ×1
backup ×1
c# ×1
database ×1
hierarchy ×1
natural-sort ×1
recursion ×1
restore ×1
sorting ×1
t-sql ×1
triggers ×1