我们的系统在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
我正在为我的公司开发一个ASP.net Web应用程序.有些用户在内部网络(Intranet)中使用此站点,有些用户使用Internet站点.我正在使用Windows身份验证模式.
我需要找到一种方法,不为Intranet用户提示 Windows身份验证模式,并为Internet用户提示 Windows身份验证模式.
我怎样才能做到这一点?
打开一个新的查询窗口.写一些SQL.保存脚本,将"另存为文件"对话框打开 - 但始终位于"个人档案"目录中的相同默认位置.有没有办法设置我的默认文件位置?...就像我曾经使用过20世纪80年代的应用程序一样?
在"工具"|"选项"下,可以为查询结果指定默认位置.对于新查询(文本编辑器),我需要相同的东西.尝试更改注册表中的位置,但SSMS只是覆盖了我的更改.有什么建议?
(我在http://www.eggheadcafe.com/software/aspnet/30098335/management-studio-default.aspx上看到了这个未解答的问题, 我有同样的问题,所以我只是在这里重新发布)
我有兴趣在Java中使用仿函数(函数对象).通过快速谷歌搜索我发现这3个包:
而且,JGA似乎可能拥有最好的设计.但我怀疑其他人实际使用过一个或多个软件包可能能够提供更多关于这些(也许是其他)函子包的优缺点的见解.
我有两个小git回购.这些项目都是从不同的点开始,但汇聚到一个非常相似的项目(相同的文件名,文件夹结构等).一个不是另一个的分支,但可以认为一个是另一个的演变.
如果我可以将两者合并,那将是很好的,这repo2是继续repo1.这是否可能,同时将历史记录添加repo2到结束repo1?
有一段时间以来,我一直试图解决为什么允许一些"食人族"类编译的原因.
在我继续之前,也许我应该解释一下我称之为"食人族"的课程.不确定我是刚刚发明了这个术语,还是已经存在了一段时间,或者即使我正确使用它,但现在这并不重要.
我基本上把食人族叫做一个消耗自己的类.换句话说,一个类的接口声明了自己类型的成员.例如:
class Foo
{
public Foo SomeFoo;
}
Run Code Online (Sandbox Code Playgroud)
如上所示,类Foo有一个类型为Foo(本身)的成员.
现在,我第一次看到这个(很久以前)我没有编译它的东西,但令我惊讶的是它确实编译了.我之所以没有编译的原因,是因为对我来说,这会尖叫某种类型的递归噩梦.
为了使事情进一步复杂化,我决定尝试同样的事情,但使类成为一个结构,如:
struct Foo
{
public Foo SomeFoo;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会编译,而是你得到错误:类型'Foo'的struct成员'Foo.SomeFoo'导致struct布局中的循环
对我来说,编译错误更有意义,没有错误,但我相信这种行为最合乎逻辑的解释,所以我想知道你们中是否有人可以解释这种行为.
谢谢.
我很久以来一直在编码,但我从未使用过像CVS或SVN这样的代码管理系统.
能否请您建议任何从基础开始的指南,然后再考虑各个软件的概念及其复杂性.
我需要使用多个分隔符来获取split数组的最后一个元素.分隔符是逗号和空格.如果没有分隔符,则应返回原始字符串.
如果字符串是"你今天怎么样?" 它应该返回"今天?"
如果输入为"hello",则输出应为"hello".
我怎样才能在JavaScript中执行此操作?
考虑二叉树:
我们有以下三个操作:
我需要一种算法来使用这些操作给出给定树的所有可能的排列.任何操作都可以应用于任何子树.对于排列,我的意思是任何具有完全相同的叶子集的树.这可能不是很困难,但我似乎无法弄明白.
[编辑]叶子也可以是名称(即变量),因此不能选择依赖于它们的属性作为整数.树确实代表了总和.
[编辑2]这个练习的要点是通过找到形式A和-A的术语来减少总和,调整树以使它们进入子树(+ A -A)以消除它们.上面的三个操作是我系统中的公理,它们需要一直使用,否则无法证明简化树等于原始树.由于我使用的是Twelf逻辑编程语言,如果我能找出算法来做我最初提出的问题,其余的就很容易了,但是替代解决方案当然是受欢迎的.
sql-server ×2
.net ×1
algorithm ×1
asp.net ×1
binary-tree ×1
c# ×1
c++ ×1
cstring ×1
functor ×1
git ×1
intranet ×1
java ×1
javascript ×1
merge ×1
newline ×1
performance ×1
repository ×1
split ×1
ssms ×1
t-sql ×1