Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TSQL查询中DateTime.FromBinary方法的转换逻辑_C#_Tsql_Datetime - Fatal编程技术网

C# TSQL查询中DateTime.FromBinary方法的转换逻辑

C# TSQL查询中DateTime.FromBinary方法的转换逻辑,c#,tsql,datetime,C#,Tsql,Datetime,我有一个表,其中包含数据类型为VARBINARYMAX的列。该列表示MyC DB layer类中不同类型的不同值。它可以是:int、string和datetime。现在我需要将一列按类型转换为三列。因此,int类型的值将转到新列ObjectInValue,依此类推 但是我在将数据传输到datetime列时遇到了问题,因为旧列包含datetime值,这是在保存数据时从C datetime.ToBinary方法长期收到的 我应该在TSQL中这样做,但不能在新列中使用.NET转换该值。你有什么想法吗

我有一个表,其中包含数据类型为VARBINARYMAX的列。该列表示MyC DB layer类中不同类型的不同值。它可以是:int、string和datetime。现在我需要将一列按类型转换为三列。因此,int类型的值将转到新列ObjectInValue,依此类推

但是我在将数据传输到datetime列时遇到了问题,因为旧列包含datetime值,这是在保存数据时从C datetime.ToBinary方法长期收到的

我应该在TSQL中这样做,但不能在新列中使用.NET转换该值。你有什么想法吗

谢谢你的建议

在T_SQl中使用CLR

基本上,您可以使用Create Assembly来注册包含函数的dll, 然后创建一个用户定义的函数来调用它,然后您就可以使用它了。 有几个规则取决于你想做什么,但基本上你只想要DateTime.FromBinary,应该不难理解

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

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

如果我告诉你,你的更新脚本中必须有一个中断,也就是说,当你实现这个技术时,你的更新脚本将一直工作到,然后你对这个操作有一个一次性的过程,然后你将从一个新版本更新

如果要验证它,只需检查新列是否存在

另一种选择是编写一个wee应用程序,从旧列中填充新列并调用它。啊


如果这不是一次性的,并且您希望保留和维护旧列,那么您就有问题了。

您可以使用CLR集成吗?您可以在sql server中使用什么版本的sql server,2005年以后的版本。它可能有点慢,但对于像这样的一次性工作,它会好的。MSSQL版本是2008 R2,但我如何使用.NET类方法?例如DateTime.FromBinary?事实上,我应该在tSQL quary中这样做,因为在我们的项目中有一个用于DB版本控制的更新sql脚本文件。该文件有点特定,我们不能在其中使用像GO这样的TSLQ操作符。因此,我认为在该脚本中启用CLR集成是很困难的。我发现解决方案可能在经过一些微调后仍然有效,但DateTime.ToBinary和ticks一样好。在刚开始的函数体中,我添加了:`set@ticks=@ticks&cast4611686018427387903 as bigint;`一切都变好了。