小编mat*_*mc3的帖子

SQL Server Compact Edition和真正的SQL Server之间的T-SQL差异?

来自广泛的SQL Server T-SQL背景,我无法找到任何描述SQL CE和完整的SQL Server之间的T-SQL支持差异的特定文档.你遇到了哪些不同之处?在某处有并排的T-SQL比较吗?我在这里看过MSDN文档,但我似乎无法找到有关哪些T-SQL语句在两者之间不可移植的任何细节.我发现的一个不同之处是缺少ISNUMERIC()函数.还有其他人?

注意:我对DML功能的差异比DDL和管理功能更感兴趣,我确信这些功能很多并且完全无趣.

t-sql sql-server sql-server-ce

6
推荐指数
1
解决办法
2614
查看次数

个人人口统计信息的模糊数据匹配

假设我有一个数据库,其中包含具有以下数据元素的人员:

  • PersonID(无意义的代理自动编号)
  • 中间初始
  • 名称后缀
  • 出生日期
  • 备用 ID(如 SSN、军人 ID 等)

我从各种格式中获取了大量数据,其中包含您能想到的这些信息的各种合理变化。一些例子是:

  • 全名、出生日期
  • 全名,最后 4 个 SSN
  • 第一个、最后一个、出生日期

当这些数据进来时,我需要写一些东西来匹配它。我不需要或期望获得超过 80% 的匹配率。自动匹配后,我会将不确定的匹配显示在网页上,供某人手动匹配。

其中一些复杂性是:

  1. 有些数据匹配比其他数据匹配更好,我想为这些数据分配权重。例如,如果 SSN 完全匹配,但由于有人使用中间名而导致姓名被关闭,那么我想为该匹配分配比名称完全匹配但 SSN 关闭时更高的置信度值。
  2. 名称匹配有一些困难。John Doe Jr. 与 John Doe II 相同,但与 John Doe Sr. 不同,如果我得到 John Doe 而没有其他信息,我需要确保系统不会选择一个,因为无法确定选择谁。
  3. 名字匹配真的很难。你有鲍勃/罗伯特、约翰/乔恩/乔纳森、汤姆/托马斯等。
  4. 仅仅因为我有一个包含 FullName+DOB 的提要,并不意味着每条记录都会填充 DOB 字段。我不想仅仅因为不匹配的 DOB 破坏了匹配的分数而错过链接。如果缺少某个字段,我想将其从可用于匹配的元素中排除。
  5. 如果有人手动匹配,我希望他们的匹配影响所有未来的匹配。因此,如果我们再次获得相同的精确数据,下次没有理由不自动匹配它。

我已经看到SSIS有模糊匹配,但我们目前不使用SSIS,而且我发现它非常笨拙并且几乎不可能进行版本控制,所以它不是我的首选工具。但如果这是最好的,请告诉我。否则,是否有任何(最好是免费的,最好是基于 .NET 或T-SQL 的)工具/库/实用程序/技术用于解决此类问题?

.net c# algorithm string-matching data-cleaning

5
推荐指数
1
解决办法
3056
查看次数

我应该如何检查 .NET 十进制值是否为整数?

我有一个用 aDecimal作为数字表示度量单位的类。只是为了简化这个例子,假设我代表厘米。我想为这个类实现一个 ToString() 方法。问题是,如果数值是整数,我只想将小数显示为整数。否则,我想将其保留为小数。因此,例如,10.5D 厘米将显示为“10.5cm”,但 7.0D 厘米应显示为“7cm”。我希望阅读起来既快速又简单。我有一个可行的解决方案,但似乎应该有更好的方法。

这是一个人为的例子,展示了我对它的第一次破解:

Public Property Units As String = "cm"
Public Property NumericValue As Decimal = 10.5D

Public Overrides Function ToString()
   Dim num As String = If(Me.NumericValue = Decimal.Ceiling(Me.NumericValue), _
                          Decimal.ToInt32(Me.NumericValue).ToString(), _ 
                          Me.NumericValue.ToString())
   Return num + Me.Units
End Function
Run Code Online (Sandbox Code Playgroud)

我有点不舒服Me.NumericValue = Decimal.Ceiling(Me.NumericValue)。关于如何更好地做到这一点的任何想法?有什么我可以用 String.Format 或 Decimal 类上的其他一些方法做的事情,可以使这更清晰并保持其性能?

.net vb.net decimal

5
推荐指数
1
解决办法
7434
查看次数

你能使用Linq-to-SQL获得类似DataReader的流媒体吗?

我已经使用Linq-to-SQL很长一段时间了,效果很好.但是,最近我一直在尝试使用它来提取大量数据并且遇到了一些问题.(当然,我理解L2S可能不是这种特殊处理的正确工具,但这就是为什么我在试验 - 找到它的极限.)

这是一个代码示例:

var buf = new StringBuilder();
var dc = new DataContext(AppSettings.ConnectionString);
var records = from a in dc.GetTable<MyReallyBigTable>() where a.State == "OH" select a;
var i = 0;
foreach (var record in records) {
   buf.AppendLine(record.ID.ToString());
   i += 1;
   if (i > 3) {
      break; // Takes forever...
   }
}
Run Code Online (Sandbox Code Playgroud)

一旦我开始迭代数据,查询就会按预期执行.当单步执行代码时,我立即进入循环,这正是我所希望的 - 这意味着L2S似乎在幕后使用DataReader而不是首先拉取所有数据.但是,一旦我到达break,查询将继续运行并拉出所有其余记录.以下是我对SO社区的问题:

1.)有没有办法阻止Linq-to-SQL在中间执行一个非常大的查询DataReader

2.)如果执行大型Linq-to-SQL查询,是否有办法阻止DataContext填充返回的每个对象的更改跟踪信息.基本上,我可以使用DataReader技术以短的对象生命周期进行大型查询,而不是填满内存吗?

如果这不是内置于DataContext自身的功能并且需要通过一些自定义扩展功能,我没关系.我只是想利用Linq的简单性和强大功能来处理夜间处理任务的大型查询,而不是依赖于T-SQL.

c# linq-to-sql

4
推荐指数
1
解决办法
6318
查看次数

我如何处理鱼的 null_glob 结果?

我有一个包含以下rm语句的 fish 函数:

rm ~/path/to/dir/*.log
Run Code Online (Sandbox Code Playgroud)

如果该路径中有 *.log 文件,则此语句可以正常工作,但在没有 *.log 文件时会失败。错误是:

~/.config/fish/functions/myfunc.fish (line 5): No matches for wildcard '~/path/to/dir/*.log'. See `help expand`.
    rm ~/path/to/dir/*.log
       ^
in function 'myfunc'
        called on standard input
Run Code Online (Sandbox Code Playgroud)

ZSH 有所谓的Glob Qualifiers。其中之一N,处理为当前模式设置 NULL_GLOB 选项,这基本上满足我的要求:

如果文件名生成的模式没有匹配项,则从参数列表中删除该模式而不是报告错误。

我知道 fish 没有ZSH-style glob qualifiers,但我不清楚如何在我的 fish 函数中处理这种情况。我应该遍历数组吗?看起来真的很冗长。或者有没有更可疑的方法来处理这种情况?

# A one-liner in ZSH becomes this in fish?
set -l arr ~/path/to/dir/*.log
for f in $arr
    rm $f
end
Run Code Online (Sandbox Code Playgroud)

fish

4
推荐指数
1
解决办法
186
查看次数

如何验证JSON对象?

我想验证传入的json对象在服务器端的正确性.有没有标准/最佳方式来做到这一点?你的验证方法是什么?

java validation json

3
推荐指数
1
解决办法
7862
查看次数

如何在另一个引用调用方中正确的sys.objects表的数据库中创建UDF或View?

使用SQL Server 2008,我想创建一个UDF,它给我一个对象的创建日期.这是代码:

create function dbo.GetObjCreateDate(@objName sysname) returns datetime as
begin
    declare @result datetime
    select @result = create_date from sys.objects where name = @objname
    return @result
end
go
Run Code Online (Sandbox Code Playgroud)

我想将这个UDF放在master数据库或其他一些共享数据库中,以便可以从任何地方访问它,除非我这样做,然后sys.objects引用从master数据库而不是我正在启动我的查询的数据库.我知道你可以这样做,因为information_schema视图位于master并且只是包含对sys.objects的本地实例的调用,所以我希望有一个简单的方法来使用我的UDF.

t-sql sql-server user-defined-functions

2
推荐指数
1
解决办法
1438
查看次数

复制方案中SQL Server存储过程的CREATE/ALTER语法?

我将所有T-SQL DDL语句存储在版本控制下的Visual Studio数据库项目中.这些脚本总是在没有错误的情况下运行,因此它们包含一个drop/create语法,如下所示:

use MyDatabase
go
if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') = 1 begin
    drop procedure dbo.MyProcName as
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
create procedure dbo.MyProcName as
--...
go
Run Code Online (Sandbox Code Playgroud)

麻烦的是,我们已经转移到复制方案,所以我不能再使用我的drop/create语法了,因为你不能删除标记为复制的对象.现在我需要创建proc,如果它不存在,或者如果它存在则改变它.我无法改变我的IF逻辑,因为我无法在IF声明中创建一个proc - 我只能放弃它.有任何想法吗?


编辑:感谢Adam的回答,这就是我最后使用的内容.不知道为什么我不考虑执行SQL字符串...必须喝更多的咖啡.

use MyDatabase
go
if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') is null begin
    exec('create proc dbo.MyProcName as')
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
alter procedure dbo.MyProcName as
    --...
go
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

2
推荐指数
1
解决办法
1757
查看次数