2011-12-11 55 views
0

我有一个包含VARBINARY(MAX)数据类型的列的表。该列表示我的c#DB图层类中的不同类型的不同值。它可以是:int,stringdatetime。现在我需要通过它的类型将那一列转换为三列。因此,对于每个新列,int类型的值将转到新列ObjectIntValue等等。在TSQL查询中转换DateTime.FromBinary方法的逻辑

但是我有将数据传送到datetime列的问题,因为旧的列包含从C#DateTime.ToBinary方法接收的long而数据保存datetime值。

我应该在TSQL中做到这一点,并且不能使用.NET将新值转换为新值。你有什么想法吗?

感谢您的任何建议!

+0

什么版本的sql server,2005以后可以在sql server中使用.net。它可能有点慢,但对于像这样的一次性工作,它会没事的。 –

+0

MSSQL版本是2008 R2,但我如何使用.NET类方法?例如DateTime.FromBinary()? – Maybe

+0

你可以使用CLR集成吗? – schglurps

回答

0

在T_SQL

使用CLR基本上你使用创建装配与你在它的功能(S)注册DLL, 然后创建一个用户定义的函数来调用它,那么你可以使用它。 有几种规则取决于你想要做什么,但基本上你只需要DateTime.FromBinary(),不应该太难以弄清楚。

从未做过自己,但这些家伙似乎知道他们在说什么

CLR in TSQL tutorial

这是一次性的转换吗?您对@schglurps的回应有点令人担忧。

如果我找到你,那么你的更新脚本中就不得不中断,也就是说,当你实现这个方法时你需要做一个工作,那么你对这个方法有一个一次性的过程,那么你会更新从一个新版本。

如果要验证它,只需检查新列的存在或不存在。

其他选择是编写一个填充新列的旧应用程序并调用它。呃...

如果这不是一回事,而且你想保留并保持旧的列,那么你有问题。

+0

我找到了解决方案[这里](http://extendeddotnet.blogspot.com/2011/10/convert-net-datetimeticks-to-t-sql.html) – Maybe

+0

可能工作后一些twidling但DateTime.ToBinary是种以及蜱虫。 –

+0

刚刚开始的函数体中,我添加了:'set @Ticks = @ Ticks&cast(4611686018427387903 as bigint);'一切都变好了。 – Maybe