我有一个保存数据的表,其中一行需要存在于另一个表中.所以,我想要一个外键来保持参照完整性.
CREATE TABLE table1
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
AnotherID INT NOT NULL,
SomeData VARCHAR(100) NOT NULL
)
CREATE TABLE table2
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
AnotherID INT NOT NULL,
MoreData VARCHAR(30) NOT NULL,
CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)
)
Run Code Online (Sandbox Code Playgroud)
但是,正如你所看到的,表我是外键,列不是PK.有没有办法创建这个外键,或者更好的方法来维护这种引用完整性?
我对SQL(Server 2008)的较低级别知识是有限的,现在由我们的DBA挑战.让我解释一下(我已经提到了明显的陈述,希望我是对的,但如果你看错了,请告诉我)情景:
我们有一张桌子可以为人们提供"法院命令".当我创建表(Name:CourtOrder)时,我创建了它:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
Run Code Online (Sandbox Code Playgroud)
然后,我将非聚集索引应用于主键(以提高效率).我的理由是它是一个唯一的字段(主键),并且应该像我们经常那样被索引,主要用于选择目的Select from table where primary key = ...
然后我在PersonId上应用了CLUSTERED索引.原因是在物理上对某个人进行分组,因为绝大多数工作都是为了获得一个人的订单.所以,select from mytable where personId = ...
我现在已被拉上了这个.有人告诉我,我们应该将聚簇索引放在主键上,将正常索引放在personId上.这对我来说似乎很奇怪.首先,为什么要在特殊列上放置聚簇索引?什么是聚类?当然这是浪费聚集索引?我相信一个普通的索引会用在一个独特的列上.此外,聚类索引意味着我们不能聚集不同的列(每个表一个,对吧?).
我被告知我犯了一个错误的原因是他们认为在PersonId上放置聚集索引会使插入变慢.对于选择速度增加5%,我们将在插入和更新时降低95%的速度.这是正确有效的吗?
他们说因为我们聚集了personId,所以当我们插入或更改PersonId时,SQL Server必须重新排列数据.
那么我问过,为什么SQL会有一个CLUSTERED INDEX的概念,如果它这么慢?它和他们说的那么慢吗?我应该如何设置索引以获得最佳性能?我以为SELECT比INSERT更多......但他们说我们在INSERTS上遇到了锁定问题......
希望可以有人帮帮我.
我对存储过程和EDMX有无穷无尽的问题.我创建了一个过程,从数据库中更新了模型,并且一切正常.然后我删除了一个列并在存储过程中添加了一个新列.我更新了模型,但EDMX似乎没有刷新proc定义.
我删除了proc,并进行了更新,但手动必须删除对proc的所有引用.我最终只是重命名proc并通过模型更新从数据库导入.
我刚才有同样的问题.添加了新列,并重命名了现有列.我通过数据库中的更新模型刷新了EDMX,但EDMX没有变化,显然在运行时,它失败了.如何使用Entity Framework完成存储过程更新?

我删除了proc,重新生成了模型,删除了proc的'cs'文件,编译后再将程序添加到数据库中,重新生成模型,然后爆炸!它添加了相同的模型3次,只有最后一个是正确的.为什么它会继续带回旧版本?
我试图在我的屏幕上有一行,左边是登录信息,然后是最右边的一些其他信息,右对齐.这是我不成功的尝试:
<div class="container well">
<div class="row">
<div class="col-lg-6">
@(Session["CurrentUserDisplay"] != null ? "Welcome, " + @Session["CurrentUserDisplay"] : "Not logged in")
</div>
<div class="col-lg-6 pull-right">Active Portfolio: @(Session["ActivePortfolioName"].ToString())
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但是第二列坐在行的中间,所以看起来它在'单元'中是不正确的.任何人都可以指导我做到这一点吗?
我需要在表中为行子集设置一个值.在SQL中,我会这样做:
UPDATE dbo.Person SET is_default = 0 WHERE person_id = 5
Run Code Online (Sandbox Code Playgroud)
有没有办法在LINQ中执行此操作?
我目前使用的是:
var result = (from p in Context.People....)
Run Code Online (Sandbox Code Playgroud)
符号.
有没有我可以使用的更新方法?或者我是否必须获取所有记录,然后在Foreach中逐个更新它们?
如果可能的话,这是最有效的方式吗?
(from p in Context.person_account_portfolio where p.person_id == personId select p)
.ToList()
.ForEach(
x =>
x.is_default =
false);
Run Code Online (Sandbox Code Playgroud) 我不得不审查一些代码,并且遇到了某人所做的事情,并且无法想出我的方式更好的原因.它可能不是,那么哪个更好/更安全/更有效?
SELECT MAX(a_date) FROM a_table WHERE a_primary_key = 5 GROUP BY event_id
Run Code Online (Sandbox Code Playgroud)
要么
SELECT TOP 1 a_date FROM a_table WHERE a_primary_key = 5 ORDER BY a_date
Run Code Online (Sandbox Code Playgroud)
我会选择第二种选择,但我不确定为什么,如果这是对的.
我们使用Entity Framework 5,但是还要求从应用程序使用正常的数据库连接来执行我们需要执行的某些自定义SQL.
所以,我正在创建一个处理此连接的DatabaseAccess类.有没有办法通过检查实体框架连接字符串来填充连接字符串?
所以:
SqlConnection cnn;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"
Run Code Online (Sandbox Code Playgroud)
我可以通过检查实体框架来构建它吗?
我试图在SQL Server 2012中创建一个索引视图,该查询具有10个连接(内部和左侧),可以进行大量访问.
但是,在尝试创建视图时,出现错误:
无法模式绑定视图'vw_transaction',因为名称'entity_event'对于模式绑定无效.
我(尝试)使用以下方法创建视图:
CREATE VIEW vw_transaction WITH SCHEMABINDING AS
Select ee.id as entity_event_id,
....
Run Code Online (Sandbox Code Playgroud)
这个错误有原因吗?它看起来像是一个保留字,因为错误提到了一个'名字',而不是一个列.Entity_event是我的主表的名称.
我有一个包含8个项目的Visual Studio 2010解决方案.它还有一个我用来创建安装的安装项目.
它是在客户端PC上首次安装时工作正常.但是,然后我修改了我的项目,并构建了一个新的安装程序,并将其传递给客户端.发生这种情况时,客户端必须首先手动卸载上次安装,然后运行安装程序.
如果他们运行安装程序,没有卸载,它似乎不会覆盖现有文件(exe和dll).通常它只是被修改的exe.但是,它不会覆盖它.客户端计算机上的版本似乎保持不变.
有没有办法强制它覆盖?
请注意,当我修改我的主应用程序项目时,我会转到项目的属性,程序集信息,并增加程序集版本以及文件版本.
我有一个方法:
static void FileChangesDetected(List<ChangedFiles> files)
Run Code Online (Sandbox Code Playgroud)
我使用Visual Studio 2010和Resharper.Resharper总是建议我更改List<T>为IEnumerable<T>,我想知道为什么会这样.
在方法中,我只是这样做:
foreach (var file in files)
{ ... }
Run Code Online (Sandbox Code Playgroud)
是否有使用IEnumerable<T>而不是List<T>?
c# ×4
sql ×3
sql-server ×3
ienumerable ×1
indexing ×1
linq ×1
list ×1
performance ×1
resharper ×1
t-sql ×1
view ×1