小编A-K*_*A-K的帖子

从班级继承会在以后伤害你吗?

你可以在我们从一个类继承的时候提供场景,它可以工作一段时间,但是其他东西会改变并引入一个bug吗?我想出了以下情况:

  • 为了实现Rectangle-with-hole,我们继承自Rectangle类.在构造函数中,我们检查孔是否在矩形内
  • 后来有人添加了一个新方法Resize到类Rectangle.他们不检查洞是否仍然在里面.
  • 在Resize之后,我们可以使用带有孔的矩形带孔而不是矩形内部,这是一个错误.

如果我选择在C#中使用对象继承,我应该注意哪些其他问题.

c# oop inheritance

7
推荐指数
2
解决办法
428
查看次数

SQL Server唯一约束(但有时仅限)

想象一下,我有一个包含3列的表格:

ID(唯一ID)描述(varchar 2000)IsDeleted(boolean)

我想添加一个唯一约束,以便所有描述都是唯一的.但仅限于活动记录,即IsDelete = false.如果用户将记录标记为已删除,则可以重新添加与已删除记录具有相同描述的记录,但不能与活动记录相同.

所以,我只想要约束来影响IsDeleted = false的记录.

蒂姆

sql-server database-design

7
推荐指数
1
解决办法
668
查看次数

SQL CTE和ORDER BY影响结果集

我在下面粘贴了一个非常简化的SQL查询版本.我遇到的问题是该ORDER BY语句影响了我的CTE的选择结果.我无法理解为什么会这样,我最初的想法是在CTE中,我执行一些SELECT声明,然后ORDER BY应该对THOSE结果起作用.

不幸的是,我看到的行为是我的内心SELECT陈述受到了订单的影响,给了我不属于TOP 10.

以下是数据示例:(按ID以相反顺序索引)

ID,   Date
9600  2010-10-12
9599  2010-09-08
9598  2010-08-31
9597  2010-08-31
9596  2010-08-30
9595  2010-08-11
9594  2010-08-06
9593  2010-08-05
9592  2010-08-02
....
9573  2010-08-10
....
8174  2010-08-05
....
38    2029-12-20
Run Code Online (Sandbox Code Playgroud)

我的基本查询:

;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
Run Code Online (Sandbox Code Playgroud)

查询返回:

ID,   Date
9600  2010-10-12
9599  2010-09-08
9598  2010-08-31
9597  2010-08-31
9596  2010-08-30
9595  2010-08-11
9594  2010-08-06
9593  2010-08-05 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server common-table-expression sql-server-2008

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

C#的lambda表达式中的默认参数值

下午好,

有人可以告诉我,如果我在C#中使用lambda表达式时可以设置默认参数值吗?例如,如果我有代码

public static Func<String, Int32, IEnumerable<String>> SomeFunction = (StrTmp, IntTmp) => { ... },
Run Code Online (Sandbox Code Playgroud)

如何将IntTmp默认值设置为,例如,两个?在方法中设置默认参数值的常用方法似乎不适用于这种表达式(我在这里真的需要这样的一种).

非常感谢你.

c# lambda

7
推荐指数
1
解决办法
2485
查看次数

如何从Ado.Net有效地调用表值参数

我需要有效地从Ado.Net向SQl Server 2008提交成千上万的数字和日期.在SQL 2008之前的日子里,我将这些数字打包在图像中,这非常快.Erland Sommarskog非常友好地将我的一些代码包含在SQL Server 2005的文章Arrays and Lists中

因为现在我们可以使用TVP,我尝试了它们.在客户端,我运行这个:

        dataTable = new DataTable();
        dataTable.Columns.Add("Date", typeof(DateTime));
        dataTable.Columns.Add("Price", typeof(decimal));
        dataTable.Rows.Add(new object[] { someDate, somePrice });
            command.CommandText = "Writers.SavePrices";
            command.CommandType = CommandType.StoredProcedure;
            var param = command.Parameters.AddWithValue("@Prices", dataTable);
            param.SqlDbType = SqlDbType.Structured;
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但我认为它没有效率.我启动了Profiler,我立即看到Ado.Net发出以下效率极低的SQL被发送到服务器:

DECLARE @Prices TABLE(...)
INSERT INTO @Prices(...)VALUES(...)
EXEC Writers.SavePrices @Prices=@Prices
Run Code Online (Sandbox Code Playgroud)

结果,在发送,解析和编译时浪费了服务器上的大量网络带宽和CPU.有没有更有效的方法来使用Ado.Net的TVP?

sql-server ado.net bulkinsert sqlbulkcopy sql-server-2008

7
推荐指数
1
解决办法
1231
查看次数

是否有相当于PostgreSQL的Redgate SQL Compare

对于我对SQL Server的所有部署,我使用的是Redgate的SQL Compare.是否有类似的部署到PostgreSql的工具?

编辑:我不是在寻找比较数据的工具.我需要比较DDL:表,函数,索引等,并生成部署脚本.因此,这与所提到的可能重复的问题不重复.

postgresql database-deployment

7
推荐指数
0
解决办法
5892
查看次数

如何以编程方式取消SQL Server执行过程

假设您已从代码中执行以下(长时间运行)过程:

int processID = DB.Execute(SQL); //some long running sql statement
Run Code Online (Sandbox Code Playgroud)

有没有办法以编程方式调用SQL Server取消进程,如果它花了太长时间(有点像在QueryAnalyzer中点击"停止"按钮)?

//cancel the process if it is taking too long
DB.Execute("sp_CancelProcess @ProcessID=" + processID);
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

为什么我的CASE表达式不确定?

我试图使用CASE表达式创建一个持久的计算列:

ALTER TABLE dbo.Calendar ADD PreviousDate AS 
case WHEN [Date]>'20100101' THEN  [Date]
    ELSE NULL
    END PERSISTED
Run Code Online (Sandbox Code Playgroud)

MSDN清楚地说CASE是确定性的,在这里

但是,我收到一个错误:

消息4936,级别16,状态1,行1"表日历"中的计算列"PreviousDate"无法保留,因为该列是非确定性的.

当然,我可以创建一个标量UDF并明确声明它是确定性的,但是有更简单的方法吗?我已经在获取最新的服务包了.谢谢.

sql sql-server calculated-columns sql-server-2008 persisted-column

6
推荐指数
2
解决办法
4469
查看次数

如何限制表的大小?

我有一个SQL Server 2005数据库.我正在将数据记录到表中.我想防止表数据变得太大.

如何将表的大小限制为x行数并保持日志记录?我希望最旧的行能够下降.

java sql-server database-design sql-server-2005

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

由列位控制的UNIQUE约束

我有一张桌子,像

FieldsOnForms(
 FieldID int (FK_Fields)
 FormID int (FK_Forms)
 isDeleted bit
)
Run Code Online (Sandbox Code Playgroud)

该对(FieldID,FormID)应该是唯一的,但仅当未删除该行时(isDeleted = 0).

是否可以在SQLServer 2008中定义这样的约束?(不使用触发器)

PS设置(FieldID,FormID,isDeleted)是唯一的,增加了将一行标记为已删除的可能性,但我希望有机会将n行(每个FieldID,FormID)设置为isDeleted = 1,并且只有一个isDeleted = 0

sql sql-server database-design unique-constraint

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