我正在创建一个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) 如果这是重复,我道歉.
您将使用哪些列标准化来存储国际国家细分数据?
例如,如果它只是美国和加拿大,我相信所有细分都有一个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
我们刚刚在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)
哪个也永远不会解决...但在这种情况下,编译器可以轻松地告诉它们是常量.它是否优化或汇总不可空的比较?
该的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,它将传递方法的委托而不是调用它.
我该如何实现这些目标:
此查询单独运行:
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) 我使用CTE来计算日志中的时间跨度,如下所示:
http://www.sqlfiddle.com/#!3/b99448/6
请注意,其中一行具有NULL值,因为这是最新的日志条目,无法进行计算.
但是,如果我将SUM这些结果NULL视为零:
http://www.sqlfiddle.com/#!3/b99448/4
如何让它停止忽略NULL值?我希望总和是NULL因为它正在增加一个NULL值.
我想制作一个返回整数形式的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确定性?
给定一个 IEnumerable,如何检查它的类型是否为 List?
给定一个 IEnumerable,我想执行 List 方法,但如果它已经是一个 List,我将简单地转换它而不是使用 .ToList()
我在.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)