我想在插入或更新记录时自动填充"ModifyDate"列.
我应该使用触发器还是可以使用计算列?
(使用SSMS2005和SQL Server 2005 Express)
我有两个存储过程在不同的线程中运行,在SQL Server 2005上运行.一个过程将新行插入到一组表中,另一个过程从同一组表中删除旧数据.这些过程在表DLevel和Model上遇到死锁.这是架构:
滚动条图像http://www.barramsoft.com/pub/images/DeadLock2.jpg
表DFile:主键= DFileID
表DLevel:主键= DLevelID,外键:DFileID
表模型:主键= ModelID,外键:DFileID
表ELement:主键= ElementID,外键1:DFileID,外键2:DLevelID
我已经隔离了导致死锁的确切的两个SQL语句(每个存储过程一个).我已经看到任何一个程序报告的死锁.我在两种情况下都使用top(1000),并且两个语句都在循环中执行,直到它们完成而没有剩下的行来删除/插入.
SQL语句1:
while (...)
begin
delete top (1000) from DLevel where DFileID = @fileID1
...
end
Run Code Online (Sandbox Code Playgroud)
SQL语句2:
while (...)
begin
insert into Element (ElementID, DFileID, LevelNum, ...)
select top (1000) el.ElementID, el.DFileID, el.LevelNum, ...
from ElementLoader el with (nolock)
left outer join Element e with (nolock)
on e.ElementID = el.ElementID
where el.DFileID = @fileID2
and e.ElementID …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,其中有一个主表(我们称之为所有者)和几个包含资产的子表(如汽车、书籍等)。
例如:
Owner有列:owner_id, nameCars有列:owner_id (foreign key), brandBooks有列:owner_id (foreign key), title, author我的程序应该使用各种第三方图书馆来计算统计数据,例如有多少宝马车主还拥有一本哈利波特书籍。我想同时读取所有表中的所有行,然后用非sql代码进行分析。
我想使用单独的语句读取所有表Select * From X。我无法使用一个大连接,因为它会返回太多行((所有者 * 汽车 * 书籍)而不是(所有者 + 汽车 + 书籍))。联合也不会削减它,因为表包含不同类型的不同列。
我已经设定
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Run Code Online (Sandbox Code Playgroud)
但我还是有一些问题。
如果我通过运行两个线程来对数据库施加压力,一个随机插入或删除,另一个读取,有时会得到不一致的结果,例如在读取和读取表Cars之间已被删除。OwnersCars
我有几个问题:
从多个表逐一读取时防止修改的正确方法是什么?在读取所有表之前,不得修改任何表。
我正在使用 SQL Server 2005(网络上)和 SQL Server 2005 Express(本地)。我可以同时显式地获取多个表的锁吗?
如果我针对本地 SQL Server Express 数据库运行,则无论我做什么都无法使其工作。如果我针对联网的 SQL Server 2005 数据库运行,我可以让它工作(需要付出一些努力)。SQL Server Express 是否支持事务隔离级别 SERIALIZABLE?我相信应该如此。差异可能是由于网络连接速度慢造成的,但我不知道。
在我的本地数据库上,我无法阻止读取之间的修改。也就是说,一个线程随机删除一个随机所有者(首先是汽车,然后是书籍,然后是所有者)或插入一个新所有者(插入所有者,插入 2 辆车,插入 2 本书)。另一个线程正在阅读使用:
Begin Tran
Select owner_id …Run Code Online (Sandbox Code Playgroud)如何在SQL Server 2005中使用表中的数据生成脚本?
我正在开发机器上使用SQL Server Express开发一个网站.我的网络托管公司正在为我提供SQL Server 2005.
目前,我所拥有的是我开发的数据库和实时服务器上的数据库.我没有原始脚本来生成模式,但我可以单独或为整个数据库自动生成创建脚本.
我现在将我的代码放入源代码控制中,我想知道如何管理我的数据库架构.我该怎么做?创建命令?改变脚本?
目前数据库非常小,维护这两个数据库并不困难,但我担心会继续前进,但它会失控.在部署新代码时,您是否有任何关于使实时数据库同步的提示?
编辑关于什么应该进入源代码控制的任何想法?DDL脚本应该在这里吗?
我是Microsoft SQL Server的新手.我有一些MySQL的经验,如果我理解正确的话,你就有了一个拥有特权的用户; 这些权限决定了您在MySQL服务器上可以访问的数据库.
但是现在我处于我必须在SQL Server 2005 Express上恢复数据库的情况,并且该数据库具有自己的用户和用户密码.因此,如果我想让这些用户可以从外部访问(以便他们可以连接到我的服务器),我该怎么做呢?
为了说明更清楚; 假设数据库服务器上有两个登录帐户"Mike"和"John",而数据库"Animals"上有两个用户; "克里斯"和"杰夫".
我需要Jeff能够登录才能访问数据库.有没有一种很好的方法可以在不创建新用户/登录的情况下实现这一目标?如果没有,最好/最常见的解决方案是什么?
我真的很感激任何有用的输入!
我可以将SQL Server Express版用于商业用途吗?
我们的客户可以使用他们的应用程序重新分发SQL Server Express版本吗?
我正在开发一个C#VS 2008/SQL Server网站应用程序.我是ASP.NET的新手.但是,我在以下代码的最后一行收到了上述错误.你能给我一些如何解决这个问题的建议吗?这编译正确,但运行后遇到此错误.
我想要做的就是将第二行"dt"中的项目存储到字符串参数中.第一行是标题,所以我不想要这些值.第二行是第一行值.我的SQL存储过程需要将这些值作为字符串.所以我想解析第二行数据并加载到2个字符串参数中.我在下面添加了更多代码.
DataTable dt;
Hashtable ht;
string[] SingleRow;
...
SqlConnection conn2 = new SqlConnection(connString);
SqlCommand cmd = conn2.CreateCommand();
cmd.CommandText = "dbo.AppendDataCT";
cmd.Connection = conn2;
SingleRow = (string[])dt.Rows[1].ItemArray;
SqlParameter sqlParam = cmd.Parameters.AddWithValue("@" + ht[0], SingleRow[0]);
sqlParam.SqlDbType = SqlDbType.VarChar;
SqlParameter sqlParam2 = cmd.Parameters.AddWithValue("@" + ht[1], SingleRow[1]);
sqlParam2.SqlDbType = SqlDbType.DateTime;
Run Code Online (Sandbox Code Playgroud)
我的错误:
System.InvalidCastException was caught
Message="Unable to cast object of type 'System.Object[]' to type 'System.String[]'."
Source="App_Code.g68pyuml"
StackTrace:
at ADONET_namespace.ADONET_methods.AppendDataCT(DataTable dt, Hashtable ht) in c:\Documents and Settings\Admin\My Documents\Visual Studio 2008\WebSites\Jerry\App_Code\ADONET methods.cs:line 88
InnerException:
Run Code Online (Sandbox Code Playgroud) 我有三个Windows服务器(data1,data2和datawitness)不属于任何域,不使用AD.我正在尝试根据http://alan328.com/SQL2005_Database_Mirroring_Tutorial.aspx上的说明设置镜像.我已经成功,直到最后一组指令,我告诉data1使用datawitness作为见证服务器.该步骤失败,并显示以下消息:
alter database MyDatabase set witness ='TCP://datawitness.somedomain.com:7024'
无法将ALTER DATABASE命令发送到远程服务器实例"TCP://datawitness.somedomain.com:7024".数据库镜像配置未更改.验证服务器是否已连接,然后重试.
我使用telnet测试了端口7024和1433,两个服务器确实可以相互连接.我还能够从主服务器上的SQL Server Manager添加到见证服务器的连接.我已经在两台服务器上使用配置管理器来启用命名管道并验证IP流量是否已启用并默认使用端口1433.
还有什么呢?我需要打开任何其他端口才能使用吗?(防火墙规则非常严格,但我知道前面提到的端口上的流量是明确允许的)
值得一提的注意事项:
每个服务器都在不同的网段中
服务器不使用AD,也不属于域
没有为这些服务器配置DNS服务器,因此我使用HOSTS文件将域名映射到IP地址(使用telnet,ping等进行验证).
防火墙规则非常严格,我无法直接调整它们,但我可以根据需要调用更改
Data1和Data2使用SQL Server 2008,Datawitness使用SQL Express 2005.所有这些都使用默认实例(即它们都不是命名实例)
certificate sql-server-2005-express mirroring sql-server-2008
我想排除从SQL Server 2005 Express数据库显示的第一行...我该怎么做?
我知道如何只返回顶行,但如何返回除顶行之外的所有行
sql ×4
sql-server ×4
.net ×1
c# ×1
certificate ×1
database ×1
ddl ×1
deadlock ×1
mirroring ×1
nolock ×1