你可以在我们从一个类继承的时候提供场景,它可以工作一段时间,但是其他东西会改变并引入一个bug吗?我想出了以下情况:
如果我选择在C#中使用对象继承,我应该注意哪些其他问题.
想象一下,我有一个包含3列的表格:
ID(唯一ID)描述(varchar 2000)IsDeleted(boolean)
我想添加一个唯一约束,以便所有描述都是唯一的.但仅限于活动记录,即IsDelete = false.如果用户将记录标记为已删除,则可以重新添加与已删除记录具有相同描述的记录,但不能与活动记录相同.
所以,我只想要约束来影响IsDeleted = false的记录.
蒂姆
我在下面粘贴了一个非常简化的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) 下午好,
有人可以告诉我,如果我在C#中使用lambda表达式时可以设置默认参数值吗?例如,如果我有代码
public static Func<String, Int32, IEnumerable<String>> SomeFunction = (StrTmp, IntTmp) => { ... },
Run Code Online (Sandbox Code Playgroud)
如何将IntTmp
默认值设置为,例如,两个?在方法中设置默认参数值的常用方法似乎不适用于这种表达式(我在这里真的需要这样的一种).
非常感谢你.
我需要有效地从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的所有部署,我使用的是Redgate的SQL Compare.是否有类似的部署到PostgreSql的工具?
编辑:我不是在寻找比较数据的工具.我需要比较DDL:表,函数,索引等,并生成部署脚本.因此,这与所提到的可能重复的问题不重复.
假设您已从代码中执行以下(长时间运行)过程:
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) 我试图使用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
我有一个SQL Server 2005数据库.我正在将数据记录到表中.我想防止表数据变得太大.
如何将表的大小限制为x行数并保持日志记录?我希望最旧的行能够下降.
我有一张桌子,像
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-server ×7
sql ×4
c# ×2
ado.net ×1
bulkinsert ×1
inheritance ×1
java ×1
lambda ×1
oop ×1
postgresql ×1
sqlbulkcopy ×1
t-sql ×1