我一直试图在网上找到关于这些陈述之间的差异的信息,在我看来它们是相同的,但我无法找到这两者的确认或两者之间的任何比较.
这样做有什么区别:
BEGIN
-- Some update, insert, set statements
END
Run Code Online (Sandbox Code Playgroud)
这样做
BEGIN TRANS
-- Some update, insert, set statements
COMMIT TRANS
Run Code Online (Sandbox Code Playgroud)
?
请注意,只有在某些异常或超时或其他常见故障的情况下才需要回滚,因此不会有回滚的条件原因.
我正在使用一个文本框在C#中工作,该文本框用作id编号的数据库(Access SQL)记录查找的输入.我希望能够在文本框中使用AutoComplete,但有一些限制.
最大的问题是系统中的ID数量大约为数千,因此我不需要一次性填充AutoComplete框,而是需要监视文本框中的内容,并且只有〜时才会显示自动完成建议. 50个或更少的选择.
目前,我正在对每个KeyDown执行此查询:SELECT count(*)FROM Table WHERE id LIKE'textbox.text%'
当计数小于50时,我使用上述语句的SELECT id版本的结果填充自动完成.这导致了我几个问题,大多数似乎是C#怪癖,我不明白.
1)当我在单个KeyDown事件中清除或添加AutoCompleteCustomSet时,按下的实际键不会被添加到字符串中(即不会发生正常的文本框输入行为).
2)我尝试将AutoCompleteCustomeSet更新分离到另一个事件(KeyPress或KeyUp),但这会导致崩溃,或者自动完成显示只会在隐藏之前显示.
我觉得这个问题必须是常见的,我只是以错误的方式去做.有人可以提供一些建议吗?谢谢!
编辑:这是Windows窗体
EDIT2:前50名选择不能解决问题,因为用户输入(可能是退格和重新输入)前50名将会改变.
我希望这个问题不是太明显……我已经找到了很多关于解释执行计划的好信息,但有一个问题我还没有找到答案。
计划(更具体地说是相对 CPU 成本)是仅基于模式还是基于数据库中当前的实际数据?
我试图对我的产品数据库中需要索引的位置进行一些分析,但我正在使用我自己的测试系统,该系统没有接近该领域产品所拥有的数据量。我看到一些奇怪的事情,比如在添加索引后估计 CPU 成本实际上略有上升,我想知道这是不是因为我的数据集太小了。
我正在使用 SQL Server 2005 和 Management Studio 来制定计划
请参阅此处的简化示例代码:
process job[num_objs];
// assume also, arr_obj1s (array of type obj1) and
// arr_obj2s (array of type obj2) are arrays of size
// num_objs, and the objects define a run() function
foreach (arr_obj1s[i]) begin
fork
automatic int j = i;
arr_obj1s[j].run(); // these run forever loops
begin
job[j] = process::self();
arr_obj2s[j].run(); // these run finite logic
end
join_none
end
foreach (job[i]) begin
wait (job[i] != null);
job[i].await();
end
// How do we ever reach here?
Run Code Online (Sandbox Code Playgroud)
我的困惑是,调用arr_obj1s[j].run()将永远不会返回(它们永远运行循环)并且我并不完全遵循该调用在开始/结束块之外的位置的含义.永远run()执行哪个进程, …
我正在将一些 SystemVerilog 代码移植到 SystemC/C++。我使用 std::bitset 来表示位向量,但我已经看到它无法提供访问切片的方法。
例如,如果我想使用 SystemVerilog 代码将 reg1 设置为 reg2 的位 4-8:
bit [3:0] reg1;
bit [15:0] reg2;
reg1 = reg2[7:4];
Run Code Online (Sandbox Code Playgroud)
我怎样才能用 std::bitset 做到这一点?
bitset<4> reg1;
bitset<16> reg2;
reg1[0] = reg2[4];
reg1[1] = reg2[5];
reg1[2] = reg2[6];
reg1[3] = reg2[7];
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我主要有一个C++背景.我正在跟踪我正在处理的一些SystemVerilog代码中的错误,并且惊讶地发现我认为对象复制分配实际上是一个引用分配.这个简化的代码显示了我的意思:
for (int i = 0; i < max_num; ++i)
{
var cls_obj obj1;
obj1 = obj_array[i];
some_function(obj1); // modifies the object passed in
// at this point BOTH obj1 and obj_array[i] are modified.
// some other code goes here
}
Run Code Online (Sandbox Code Playgroud)
我原以为只会obj1被修改.这是因为var关键字?在SystemVerilog中,复制分配与参考分配的确切工作原理是什么?我很难从网络搜索中查找信息.
这就是我所拥有的(message()是来自第三方库的专用日志记录功能):
#define LOG(fmt, ...) message("%s %s(): #fmt", __FILE__, __func__, __VA_ARGS__);
Run Code Online (Sandbox Code Playgroud)
所以我希望能够做到这样的事情:
LOG("Hello world")
LOG("Count = %d", count)
Run Code Online (Sandbox Code Playgroud)
并将它扩展到:
message("%s %s(): Hello world", __FILE__, __func__);
message("%s %s(): Count = %d", __FILE__, __func__, count);
Run Code Online (Sandbox Code Playgroud)
但#fmt的东西不起作用.它不会评估宏参数并打印为"#fmt".有可能做我想做的事吗?
我正在从SystemVerilog的代码移植到SystemC.SV很容易将位/逻辑的打包结构解释为单个位/逻辑向量.例如:
typedef struct logic {
logic [31:0] blk1; //63:32
logic [4:0] blk2; //31:27
logic [2:0] blk3; //26:24
logic [4:0] blk4; //23:19
logic [2:0] blk5; //18:16
logic [7:0] blk6; //15:8
logic [7:0] blk7; //7:0
} typ_block;
...
typ_block blockA;
logic[63:0] blockB;
blockB = blockA; // no problem here
Run Code Online (Sandbox Code Playgroud)
但是使用SystemC并使用sc_lv <>模板,由于类型不匹配,这会产生编译器错误.
struct typ_block {
sc_lv<32> blk1; //63:32
sc_lv<5> blk2; //31:27
sc_lv<3> blk3; //26:24
sc_lv<5> blk4; //23:19
sc_lv<3> blk5; //18:16
sc_lv<8> blk6; //15:8
sc_lv<8> blk7; //7:0
};
...
typ_block blockA;
sc_lv<64> blockB;
blockB …Run Code Online (Sandbox Code Playgroud) 这是一个简单的SystemVerilog问题,我很难找到答案.
在这种位数组初始化语法中,b [0]部分是分配给最高有效位还是最低有效位?
bit a[7:0];
bit b[7:0] = 8'hff;
bit c[7:0] = 8'h00;
a = {b[0], c[6:0]};
Run Code Online (Sandbox Code Playgroud)
那么[0] == 1还是[7] == 1?
假设我有一个表amountInfo,其中包含列(id,amount1,amount2,amount3),其中amountX是money值,id是一个int值,范围从1到10以下的某个int.
目前我有一些代码大致这样做:
declare @id int, @idmax int, @amounttotal money
select @idmax = (select max(Id) from amountInfo)
while (@id <= @idmax)
begin
select @amounttotal = sum(amount1 + amount2 + amount3)
from amountinfo where id=@id
-- do something with @amounttotal
select @id=@id+1
end
Run Code Online (Sandbox Code Playgroud)
有没有办法在这里用某种复杂的select语句分解while循环?我对C/C++/C#编程很有经验,但SQL对我来说有点新鲜.谢谢!
编辑:基本上"--do something"部分涉及将单个@amounttotals插入另一个表.我正在运行的实际查询比这更复杂,但我希望在发布一个巨大的代码示例之前先解决这个简单的问题.
我正在尝试为我正在编写的存储过程找到使用FULL OUTER JOIN的替代方法.这是场景.
两张大多数不相关的数据表,表示需要发生的事件.事件需要按时间顺序处理,两个表都有一个日期时间列.因此,我需要获取一个表,作为按日期时间排序的所有这些事件的列表(这两个日期时间列需要混合在一起).
一个小问题:有时两个表中的事件是相关的,在这种情况下,无论日期时间如何,表A中的事件都需要先行.因此,如果A有3个事件,而B有3个事件,但A和B之间只有一个相关的对,我想返回5行.如果存在不相关的数据,则会有NULL数据(这没关系,我使用NULL数据检查来确定下一步要做什么,即进程事件A或B等)
目前我看起来像这样:
SELECT
CASE
WHEN A.EventDateTime IS NULL THEN B.EventDateTime
ELSE A.EventDateTime
END AS SortDateTime,
A.EventId,
B.EventId,
FROM A FULL OUTER JOIN B
ON A.RelatedData=B.RelatedData
ORDER BY SortDateTime
Run Code Online (Sandbox Code Playgroud) sql ×3
c++ ×2
sql-server ×2
verilog ×2
autocomplete ×1
bitset ×1
c ×1
c# ×1
fork-join ×1
indexing ×1
macros ×1
optimization ×1
outer-join ×1
refactoring ×1
systemc ×1
transactions ×1
winforms ×1