小编Mat*_*hew的帖子

TSQL Parent> Child>没有游标的子子复制

我正在创建一个SQL 2008 R2存储过程来复制行及其所有子行.

这是一个包含父,子和子子的3层设置给定我需要创建副本的父ID.

我用一个解决了它fast_forward cursor.

我知道我也可以通过行循环执行它,但我不相信这会比这个游标方法更快.你的想法是什么?

有没有更好的方法来完成这项任务而不使用游标?

编辑:我考虑的另一个选项是创建一个临时表,其中包含TBLACStages记录的旧/新PKID.

TBLACStages可能有1到20个相应的行(TBLACUpgrade每行TBLACStages行可能有3行)

CREATE PROCEDURE [dbo].[spDuplicateACUnit]
@pACUnitID bigint = 0 
AS BEGIN
SET NOCOUNT ON;

DECLARE @NewACUnitID bigint = 0

INSERT INTO TBLACUnits ([col1] ,[col2] ,[...] ,[coln]) SELECT [col1] ,[col2] ,[...] ,[coln] FROM TBLACUnits WHERE ACUnitID = @pACUnitID

SELECT @NewACUnitID = SCOPE_IDENTITY()

DECLARE @ACStageID bigint = 0 
    DECLARE @NewACStageID bigint = 0

DECLARE @ACUnitCursor CURSOR

SET @ACUnitCursor = CURSOR LOCAL FAST_FORWARD FOR SELECT ACStageID FROM TBLACStages WHERE TBLACStages.ACUnitID = @pACUnitID

OPEN …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server cursors fast-forward

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

国际国家/地区(州,省,地区等)的列类型和大小

如果这是重复,我道歉.

您将使用哪些列标准化来存储国际国家细分数据?

例如,如果它只是美国和加拿大,我相信所有细分都有一个2个字符的缩写...这可能会借给Char(2)

这在国际上是不可能持续的,以免我们假设只有1296个(AZ,0-9)细分.

我找不到这些的ISO列表或甚至是如何存储它们的指示都没有成功.

这很好,我现在不需要了解它们,但我想知道有一个标准和标准信息可以根据需要存储.

谢谢

编辑:我似乎可以使用ISO 3166-2标准来完成这项工作:http: //en.wikipedia.org/wiki/ISO_3166-2

可浏览此数据集:http: //www.commondatahub.com/live/geography/state_province_region/iso_3166_2_state_codes

sql country standards iso state

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

C#visual studio编译器如何处理struct/NULL比较?

我们刚刚在c#.net 4代码库中遇到了一些这样的错误代码

DateTime myDate = someValue;
If (myDate==Null)
    Do Something
Run Code Online (Sandbox Code Playgroud)

我们发现这种情况永远不会发生.

编译器如何处理这些不可为空的结构比较?

最初我们感到惊讶的是它会编译......但是在你可以肯定有一个恒定的比较的点上合理化它:

If(1==2)
Run Code Online (Sandbox Code Playgroud)

哪个也永远不会解决...但在这种情况下,编译器可以轻松地告诉它们是常量.它是否优化或汇总不可空的比较?

c# compiler-construction null struct compile-time-constant

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

如何在不实例化不必要的缓存对象的情况下填充MemoryCache?

的MemoryCache类公开了一个名为方法.AddOrGetExisting这是一个线程安全的方式来获得,如果存在,如果不存在添加.

NULL如果缓存的对象尚不存在,则返回此方法.我想我理解这个的价值,因为它向用户提供关于它在缓存中的存在的反馈.

我的缓存解析器看起来像这样:

private static T GetCachedCollection<T>(Guid cacheKey, Lazy<T> initializer)
{
    return (T) (MemoryCache.Default.AddOrGetExisting(cacheKey.ToString(), initializer.Value, _policy) ?? initializer.Value);
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是,除非需要,否则不会创建对象,如果需要,我不想构造它两次.

我担心的是,当我将.Value我的Lazy类型作为参数传递时,无论是否在缓存中找到该项,它都可以调用初始化程序.但是,如果我正确理解JIT,它将传递方法的委托而不是调用它.

我该如何实现这些目标:

  1. 如果对象初始值设定项已存在于缓存中,则不要调用它
  2. 如果它不在缓存中,则只调用一次.

.net c# lazy-evaluation memorycache

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

选择查询比查看快2-3倍

此查询单独运行:

SELECT 
    -- lots of columns 
FROM 
    table1 t1
    LEFT JOIN table2 t2
        ON t2.[userid] = t1.[userid]
    LEFT JOIN table3 t3
        ON t1.[orderid] = t3.[orderid]
    LEFT JOIN table4 t4
        ON t4.[orderitemlicenseid] = t3.[orderitemlicenseid]
    LEFT JOIN table5 t5
        ON t1.[orderid] = t5.[orderid]
    LEFT JOIN table6 t6
        ON t5.[transactionid] = t6.[transactionid]
    LEFT JOIN table7 t7
        ON t7.[transactionid] = t5.[transactionid]
    LEFT JOIN table8 t8
        ON t8.[voucherid] = t7.[voucherid]
    LEFT JOIN table9 t9
        ON t8.[voucherid] = t9.[voucherid]
    LEFT JOIN table10 t10
        ON t10.[vouchergroupid] = …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-view

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

为什么我的SQL SUM在包含NULL值时不会返回NULL?

我使用CTE来计算日志中的时间跨度,如下所示:

http://www.sqlfiddle.com/#!3/b99448/6

请注意,其中一行具有NULL值,因为这是最新的日志条目,无法进行计算.

但是,如果我将SUM这些结果NULL视为零:

http://www.sqlfiddle.com/#!3/b99448/4

如何让它停止忽略NULL值?我希望总和是NULL因为它正在增加一个NULL值.

sql sql-server-2008

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

我可以使SQL Server FORMAT确定吗?

我想制作一个返回整数形式的UDF,YYYYMM以便我可以在一个月内轻松地对某些内容进行分区.我试图将此函数分配给PERSISTED计算列的值.

我目前有以下,工作正常:

CREATE FUNCTION dbo.GetYearMonth(@pDate DATETIME2)
RETURNS INT
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @fYear VARCHAR(4) = RIGHT('0000' + CAST(YEAR(@pDate) AS VARCHAR),4)
    DECLARE @fMonth VARCHAR(2) = RIGHT('00' + CAST(MONTH(@pDate) AS VARCHAR),2)

    RETURN CAST(@fYear + @fMonth AS INT)
END
Run Code Online (Sandbox Code Playgroud)

但我认为使用它更清洁FORMAT.我试过这个:

CREATE FUNCTION dbo.GetYearMonth(@pDate DATETIME2)
RETURNS INT
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @fYear VARCHAR(4) = FORMAT(@pDate,'yyyy', 'en-us')
    DECLARE @fMonth VARCHAR(2) = FORMAT(@pDate,'MM', 'en-us')

    RETURN CAST(@fYear + @fMonth AS INT)
END
Run Code Online (Sandbox Code Playgroud)

但这个功能是不确定的.有没有办法FORMAT确定性?或者有更好的方法来做到这一点,使UDF确定性?

sql-server user-defined-functions sql-server-2014

3
推荐指数
2
解决办法
708
查看次数

如何检查 IEnumerable 是否为列表?

给定一个 IEnumerable,如何检查它的类型是否为 List?

给定一个 IEnumerable,我想执行 List 方法,但如果它已经是一个 List,我将简单地转换它而不是使用 .ToList()

.net ienumerable types list

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

如何改善短弦的散列以避免碰撞?

我在.NET4中使用短字符串的哈希冲突有问题.
编辑:我在.NET中使用内置的字符串散列函数.

我正在使用存储转换方向的对象来实现缓存

public class MyClass
{
    private string _from;
    private string _to;

   // More code here....

    public MyClass(string from, string to)
    {
        this._from = from;
        this._to = to;
    }

    public override int GetHashCode()
    {
        return string.Concat(this._from, this._to).GetHashCode();
    }

    public bool Equals(MyClass other)
    {
        return this.To == other.To && this.From == other.From;
    }

    public override bool Equals(object obj)
    {
        if (obj == null) return false;
        if (this.GetType() != obj.GetType()) return false;
        return Equals(obj as MyClass);
    }
} …
Run Code Online (Sandbox Code Playgroud)

.net c# string hash collision

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