在代码中,可以指定一次全局可访问的常量/枚举/等,然后可以在整个应用程序中重用它们.这使得能够使用像'Mazda'这样有意义的名称而不是像'2'这样的数字.
我们希望在SQL Server存储过程中也这样做,但不确定实现它的最佳方法.
例如,对于下表(众所周知的汽车模式):
Car       ManufacturerId 
350Z       1
Hilux      2
Yaris      2
ManufacturerId   Name
1                Nissan
2                Toyota
所以不要写作
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
我们想写类似的东西
SELECT * FROM Car WHERE ManufacturerId = @Nissan
我们的一个限制是我们不能依赖于Manufacturer.Name在App的生命周期中保持不变.我们确实考虑过一个永远不会改变的"Code"列,并且这样的联接被查找:
SELECT * 
FROM Car c 
    INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
我对此有点犹豫,因为它使用额外的连接和字符串比较,可以拼写错误.
无需在每个存储过程中声明变量,最好的方法是什么?
我正在开发一个ASP.NET MVC 2应用程序,它连接到一些服务来进行数据检索和更新.这些服务要求我在更新数据时提供原始实体以及更新的实体.这样做可以改变跟踪和乐观并发.服务无法更改.
我的问题是我需要以某种方式在回发之间存储原始实体.在WebForms中,我会使用ViewState,但从我读过的内容来看,这就是MVC.原始值不必是防篡改证明,因为服务将它们视为不可信.实体将是(最大)1k,它是一个内联网应用程序.
我提出的选择是:
我倾向于选项4,尽管3会更简单.这些有效的选择还是我走错了路?有没有更好的方法呢?
我们的应用程序从它的主窗口中添加和删除 WPF (4.0) UserControls,我们注意到它们没有收集垃圾(通过从不返回 null 的 WeakReferences)。似乎如果 UserControl 具有绑定,即使从未将控件添加到树中,也会发生这种情况。控制台应用程序中最简单的复制如下:
主程序
class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        var obj = GetObj();
        var ctl = GetCtl();
        for (int x = 0; x < 4; x++)
        {
            GC.Collect();
            Thread.Sleep(1000);
        }
        bool objAlive = obj.IsAlive;
        bool ctlAlive = ctl.IsAlive;
        Console.WriteLine(objAlive + "-" + ctlAlive);
        Console.ReadLine();
    }
    private static WeakReference GetObj()
    {
        return new WeakReference(new object());
    }
    private static WeakReference GetCtl()
    {
        return new WeakReference(new MyCtl());
    }
}
MyCtl 用户控件(后面的代码是标准的,没有被修改 …
我在Windows窗体上有一些listview控件,我已经使用VS2005中的属性网格为它们分配了一个共同的contextmenustrip.
现在,当从任何列表视图中的contextmenu进行选择时,有没有办法可以获得对凸起菜单的正确宿主控制?
我们的生产系统有一个约5秒的查询,但在我们的镜像系统上(尽可能与生产相同)和开发系统需要不到1秒.
我们检查了查询计划,我们可以看到它们有所不同.同样从这些计划中我们可以看出为什么一个人比另一个人服用更长时间.数据,schame和服务器类似,存储过程相同.
我们知道如何通过重新排列的加入,增加提示来解决它,但是此刻它会更容易,如果我们没有做对存储过程(文书)的任何变化.我们还尝试了一个sp_recompile.
什么可能导致两个查询计划之间的差异?
系统:Win2k3 Enterprise上的SQL 2005 SP2 Enterprise
更新:感谢您的回复,结果证明这是统计数据.见下面的摘要.
sql sql-server stored-procedures sql-server-2005 sql-execution-plan
这是对另一个问题的答案部分中的这个问题的回应.
我有一个Orders集合,每个Order订购OrderItems的集合,每个OrderItem都有一个PartId.使用LINQ如何实现以下SQL语句:
1)选择具有特定零件ID的所有订单
SELECT *
FROM Order
WHERE Id in (SELECT OrderId FROM OrderItems WHERE PartId = 100)
2)选择Order.OrderNumber和OrderItem.PartName
SELECT Order.OrderNumber, OrderItem.PartName
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId
WHERE OrderItem.partId = 100
3)选择Order.OrderNumber和整个OrderItem细节:
SELECT Order.OrderNumber, OrderItem.*
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId
WHERE OrderItem.partId = 100
我有一个十六进制字符串,我需要转换为字节数组.最好的方法(即有效和最少的代码)是:
string hexstr = "683A2134";
byte[] bytes = new byte[hexstr.Length/2];
for(int x = 0; x < bytes.Length; x++)
{
    bytes[x] = Convert.ToByte(hexstr.Substring(x * 2, 2), 16);
}
在我有32位值的情况下,我可以执行以下操作:
string hexstr = "683A2134";
byte[] bytes = BitConverter.GetBytes(Convert.ToInt32(hexstr, 16)); 
然而,在一般情况下呢?有没有更好的内置功能,或更清晰(不必更快,但仍然高性能)这样做的方式?
我更喜欢内置函数,因为除了这个特殊的转换之外,似乎有一个用于所有东西(很常见的东西).
.net ×3
sql ×2
sql-server ×2
asp.net-mvc ×1
contextmenu ×1
forms ×1
hex ×1
linq ×1
listview ×1
memory-leaks ×1
wpf ×1