小编Sör*_*lau的帖子

在多行上执行表值函数?

给定一个表值函数,如dbo.Split()"T-SQL:对面字符串连接-如何将字符串分割成多个记录",我如何通过多行作为参数?

这有效:

SELECT *
FROM dbo.Split
  (',', (SELECT myColumn FROM Stuff WHERE id = 22268))
WHERE ISNULL(s,'') <> ''
Run Code Online (Sandbox Code Playgroud)

它返回:

pn          s
----------- -----------
1           22351
2           22354
3           22356
4           22357
5           22360
Run Code Online (Sandbox Code Playgroud)

但这不是:

SELECT *
FROM dbo.Split
  (',', (SELECT myColumn FROM Stuff))
WHERE ISNULL(s,'') <> ''
Run Code Online (Sandbox Code Playgroud)

这也不是:

SELECT * FROM dbo.Split_temp(',', myColumn), Stuff
Run Code Online (Sandbox Code Playgroud)

文档说:

当在子查询的FROM子句中调用返回表的用户定义函数时,函数参数不能引用外部查询中的任何列.

我正在寻找的那种结果集看起来像:

id          pn          s
----------- ----------- -----------
22268       1           22351
22268       2           22354
22268       3           22356
22268       4 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server-2005 user-defined-functions

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

防止相互递归执行触发器?

假设你有表格PresentationsEvents.保存演示文稿并包含基本事件信息(如位置和日期)时,将使用触发器自动创建事件.(我担心技术原因不可能简单地将数据保存在一个地方并使用视图.)此外,当在演示文稿中稍后更改此信息时,触发器也会将更新复制到事件中,像这样:

CREATE TRIGGER update_presentations
ON Presentations
AFTER UPDATE
AS
BEGIN
    UPDATE Events
    SET Events.Date = Presentations.Date,
        Events.Location = Presentations.Location
    FROM Presentations INNER JOIN Events ON Presentations.EventID = Events.ID
    WHERE Presentations.ID IN (SELECT ID FROM inserted)
END
Run Code Online (Sandbox Code Playgroud)

现在,客户想要它,以便如果用户更改了事件中的信息,它也应该返回到演示文稿.出于显而易见的原因,我不能这样做:

CREATE TRIGGER update_events
ON Events
AFTER UPDATE
AS
BEGIN
    UPDATE Presentations
    SET Presentations.Date = Events.Date,
        Presentations.Location = Events.Location
    FROM Events INNER JOIN Presentations ON Events.PresentationID = Presentations.ID
    WHERE Events.ID IN (SELECT ID FROM inserted)
END
Run Code Online (Sandbox Code Playgroud)

毕竟,这会导致每个触发器相互触发.我能做的是last_edit_by …

sql sql-server recursion triggers sql-server-2005

17
推荐指数
1
解决办法
1万
查看次数

Mac(计算机)给Rails开发人员带来了什么好处?

我试图理解为什么在Mac上发生如此多的Rails开发?或者这只是一个神话?有没有确凿的证据支持这一点?

macos ruby-on-rails

16
推荐指数
4
解决办法
7691
查看次数

什么是Windows 10的supportedOS GUID?

我们正在检测统计数据的OS版本.从Windows 8.1开始,操作系统在使用时"谎称"其版本GetVersion.但是,从.NET 4.5.1开始System.Environment.OSVersion 仍然调用此API.因此,我们在清单中添加了8.1的GUID,效果很好.

现在,我想为Windows 10做同样的准备.这个GUID是否已知?

(编辑)P /调用VerSetConditionMask和VerifyVersionInfo来检查6.4或更高版本似乎确实有效.

c# winapi .net-4.0 windows-10

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

我如何(优雅地)从内部关闭工作人员服务?

我正在使用 .NET Core 3.1 辅助服务模板来构建 Windows 服务。

我认为基本流程应该在 内处理ExecuteAsync,大致如下:

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                try
                {
                    _Logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

                    await SomeMethodThatDoesTheWork(stoppingToken);
                }
                catch (Exception ex)
                {
                    _Logger.LogError(ex, "Global exception occurred. Will resume in a moment.");
                }

                await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken);
            }
        }
Run Code Online (Sandbox Code Playgroud)

我正在尝试从进程中正确发出我希望应用程序关闭的信号。

停止服务时,我假设StopAsync()被调用。这似乎工作正常。所以我认为await StopAsync()会成功,但之后,ExecuteAsync仍然继续运行(所以我猜StopAsync不会要求取消,你不应该自己调用它)。

所以我用另一个布尔值修改了我的循环:

            while (!stoppingToken.IsCancellationRequested && !_ShuttingDown)

Run Code Online (Sandbox Code Playgroud)

这确实退出循环,并且永远不会ExecuteAsync再次进入。但是,该应用程序只是继续运行。根据调试器,它只是停留在host.Run().

我如何向应用程序主机发出我想要关闭的信号?

c# asp.net .net-core

13
推荐指数
1
解决办法
6781
查看次数

我可以将using(){}块与方法的out参数组合使用吗?

给定一种方法

public static bool Connection.TryCreate(out Connection connection) {}
Run Code Online (Sandbox Code Playgroud)

还有一段调用代码:

Connection connection;
if (!Connection.TryCreate(out connection))
    // handle failure gracefully.

/*
 * work with connection
 *
 * …
 *
 */

connection.Dispose();
Run Code Online (Sandbox Code Playgroud)

bool.TryParse和朋友使用相同的模式,即TryCreate返回操作是否成功.

我意识到using()变量需要在其块内是只读的,但有没有办法将上面变成一个using() {}块(TryCreate只设置一次),如下所示:

using (Connection connection)
{
    if (!Connection.TryCreate(out connection))
        // this would leave the using() block prematurely

    /*
     * work with sconnection
     *
     * …
     *
     */
}
Run Code Online (Sandbox Code Playgroud)

(这不编译:

错误CS1657:无法将'connection'作为ref或out参数传递,因为它是'using variable'

)

c# using-statement .net-3.5

11
推荐指数
2
解决办法
1679
查看次数

对象数据库的优缺点是什么?

关于对象关系映射器有很多信息以及如何最好地避免阻抗不匹配,如果使用对象数据库,所有这些似乎都没有实际意义.我的问题是为什么不经常使用这个?是因为性能原因还是因为对象数据库导致您的数据成为应用程序的专有数据,还是因为其他原因?

database oop rdbms relational object-oriented-database

10
推荐指数
2
解决办法
4247
查看次数

9
推荐指数
1
解决办法
6652
查看次数

应该如何布置NSTableCellViews?

我有一个相当基本MainWindow.xib的源列表样式侧边栏.我通过将源列表模板拖到窗口中来创建它,窗口已经包含两个NSTableCellViews:HeaderCellDataCell.

后者由图标(使用NSImageView)和标签(NSTextField)组成.相反,我想要标签和另一个较小的标签.在IB中,这看起来如下:

根据IB的来源清单

如果我专注于公正DataCell,它会相应地突出显示:

DataCell突出显示

事实上,实际运行程序,它看起来不像模板:

选择实时DataCell中的第二项

请注意两者如何NSTextField一起被粉碎成一个.我的理解是,基于视图的NSOutlineViews(以及基于视图的NSTableViews)应该被设计为IB内的模板.相反,模板中的维度似乎大多被忽略了.

以下是从数据源设置视图值的代码:

public class TourSourceListDelegate : NSOutlineViewDelegate
{
    public override bool IsGroupItem(NSOutlineView outlineView, MonoMac.Foundation.NSObject item)
    {
        return (item as TourSourceListDataSource.Item).IsHeader;
    }

    public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, MonoMac.Foundation.NSObject item)
    {
        if (IsGroupItem(outlineView, item))
        {
            return outlineView.MakeView("HeaderCell", this);
        }
        else
        {
            var data = item as TourSourceListDataSource.Item;
            var dataView = outlineView.MakeView("DataCell", this);

            (dataView.Subviews[0] as …
Run Code Online (Sandbox Code Playgroud)

xib nstextfield monomac xamarin-studio xcode5

9
推荐指数
1
解决办法
513
查看次数

数据收集器集中的奇怪值

我正在各种虚拟机上收集一些性能数据.DataCollectorSet初始化如下:

set.Subdirectory = set.name;
set.SubdirectoryFormat = AutoPathFormat.plaYearMonthDay;

var schedule = set.Schedules.CreateSchedule();
schedule.Days = WeekDays.plaEveryday;
schedule.StartDate = DateTime.Now;

set.Schedules.Add(schedule);

set.Commit(set.name, null, CommitMode.plaCreateNew);
Run Code Online (Sandbox Code Playgroud)

然后我添加一个收藏家:

var collector = (IPerformanceCounterDataCollector)set.DataCollectors.CreateDataCollector(DataCollectorType.plaPerformanceCounter);

collector.FileName = counterPath.Replace("\\", "_");
collector.LogAppend = true;
collector.FileNameFormat = AutoPathFormat.plaYearMonthDay;
collector.SampleInterval = 60u;
collector.SegmentMaxRecords = 1440;
collector.LogFileFormat = FileFormat.plaTabSeparated;

set.DataCollectors.Add(collector);

var counters = new string[1];
counters[0] = counterPath;
collector.PerformanceCounters = counters;

set.Commit(set.name, null, CommitMode.plaCreateOrModify);
Run Code Online (Sandbox Code Playgroud)

当我\LogicalDisk(_Total)\% Disk Time在几十台机器上运行时,我得到的值看起来像预期的百分比 - 它们大多在0.00到5.00左右,但有时候,在高活动期间,会达到两位数.

但是,在一台机器上,所有值都高于100.无论机器是否显示繁忙,它们都显示在大约120和170之间.同时,使用相同的计数器手动运行perfmon显示可能正确的值 - 忙时接近100%,否则保持在10%以下.

这是来自具有预期结果的机器的前几个输出线:

"(PDH-TSV 4.0)(MitteleuropäischeSommerzeit)( - 120)""\ BR-DOMAIN \LogischerDatenträger(_Total)\ Zeit(%)""08/04/2015 01:00:18.425""""08/04/2015 01:01:18.407""2.4181960253316448""08/04/2015 …

c# perfmon .net-4.0

9
推荐指数
1
解决办法
396
查看次数