标签: sql-server-2005-express

SQL Server 2005 - ModifyDate列 - 使用计算列是否正确实现此方法?

我想在插入或更新记录时自动填充"ModifyDate"列.

我应该使用触发器还是可以使用计算列?

(使用SSMS2005和SQL Server 2005 Express)

sql sql-server sql-server-2005-express

5
推荐指数
1
解决办法
1656
查看次数

如何避免这两个SQL语句之间的死锁?

我有两个存储过程在不同的线程中运行,在SQL Server 2005上运行.一个过程将新行插入到一组表中,另一个过程从同一组表中删除旧数据.这些过程在表DLevelModel上遇到死锁.这是架构:

滚动条图像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)

sql deadlock nolock sql-server-2005-express

5
推荐指数
1
解决办法
2762
查看次数

SQL Server Express 和 SQL Server 2005 上的事务隔离和读取多个表

我有一个数据库,其中有一个主表(我们称之为所有者)和几个包含资产的子表(如汽车、书籍等)。

例如:

  • Owner有列:owner_id, name
  • Cars有列:owner_id (foreign key), brand
  • Books有列:owner_id (foreign key), title, author

我的程序应该使用各种第三方图书馆来计算统计数据,例如有多少宝马车主还拥有一本哈利波特书籍。我想同时读取所有表中的所有行,然后用非sql代码进行分析。

我想使用单独的语句读取所有表Select * From X。我无法使用一个大连接,因为它会返回太多行((所有者 * 汽车 * 书籍)而不是(所有者 + 汽车 + 书籍))。联合也不会削减它,因为表包含不同类型的不同列。

我已经设定

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
Run Code Online (Sandbox Code Playgroud)

但我还是有一些问题。

如果我通过运行两个线程来对数据库施加压力,一个随机插入或删除,另一个读取,有时会得到不一致的结果,例如在读取和读取表Cars之间已被删除。OwnersCars

我有几个问题:

  1. 从多个表逐一读取时防止修改的正确方法是什么?在读取所有表之前,不得修改任何表。

    我正在使用 SQL Server 2005(网络上)和 SQL Server 2005 Express(本地)。我可以同时显式地获取多个表的锁吗?

  2. 如果我针对本地 SQL Server Express 数据库运行,则无论我做什么都无法使其工作。如果我针对联网的 SQL Server 2005 数据库运行,我可以让它工作(需要付出一些努力)。SQL Server Express 是否支持事务隔离级别 SERIALIZABLE?我相信应该如此。差异可能是由于网络连接速度慢造成的,但我不知道。

    在我的本地数据库上,我无法阻止读取之间的修改。也就是说,一个线程随机删除一个随机所有者(首先是汽车,然后是书籍,然后是所有者)或插入一个新所有者(插入所有者,插入 2 辆车,插入 2 本书)。另一个线程正在阅读使用:

    Begin Tran
    Select owner_id …
    Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-server-2005-express

5
推荐指数
1
解决办法
1949
查看次数

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

使用SQL Server Express进行开发时如何管理版本控制?

我正在开发机器上使用SQL Server Express开发一个网站.我的网络托管公司正在为我提供SQL Server 2005.

目前,我所拥有的是我开发的数据库和实时服务器上的数据库.我没有原始脚本来生成模式,但我可以单独或为整个数据库自动生成创建脚本.

我现在将我的代码放入源代码控制中,我想知道如何管理我的数据库架构.我该怎么做?创建命令?改变脚本?

目前数据库非常小,维护这两个数据库并不困难,但我担心会继续前进,但它会失控.在部署新代码时,您是否有任何关于使实时数据库同步的提示?

编辑关于什么应该进入源代码控制的任何想法?DDL脚本应该在这里吗?

database version-control ddl sql-server-2005-express

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

SQL Server 2005(Express) - 登录vs用户

我是Microsoft SQL Server的新手.我有一些MySQL的经验,如果我理解正确的话,你就有了一个拥有特权的用户; 这些权限决定了您在MySQL服务器上可以访问的数据库.

但是现在我处于我必须在SQL Server 2005 Express上恢复数据库的情况,并且该数据库具有自己的用户和用户密码.因此,如果我想让这些用户可以从外部访问(以便他们可以连接到我的服务器),我该怎么做呢?

为了说明更清楚; 假设数据库服务器上有两个登录帐户"Mike"和"John",而数据库"Animals"上有两个用户; "克里斯"和"杰夫".

我需要Jeff能够登录才能访问数据库.有没有一种很好的方法可以在不创建新用户/登录的情况下实现这一目标?如果没有,最好/最常见的解决方案是什么?

我真的很感激任何有用的输入!

sql sql-server sql-server-2005 sql-server-2005-express

4
推荐指数
1
解决办法
2300
查看次数

商业上使用SQL Express版本

我可以将SQL Server Express版用于商业用途吗?

我们的客户可以使用他们的应用程序重新分发SQL Server Express版本吗?

sql-server-2005-express sql-server-express sql-server-2008

3
推荐指数
1
解决办法
424
查看次数

无法将类型为'System.Object []'的对象强制转换为'System.String []'

我正在开发一个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)

c# sql-server-2005-express visual-studio-2008

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

无法在SQL Server镜像方案中设置见证错误

我有三个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

2
推荐指数
1
解决办法
6895
查看次数

如何排除SQL Server 2005 Express中的第一行

我想排除从SQL Server 2005 Express数据库显示的第一行...我该怎么做?

我知道如何只返回顶行,但如何返回除顶行之外的所有行

.net sql-server-2005-express sql-server-express

2
推荐指数
1
解决办法
2806
查看次数