GVKun编程网logo

事务隔离和从SQL Server Express和SQL Server 2005上的多个表中读取(sqlserver事务的隔离级别)

22

在这里,我们将给大家分享关于事务隔离和从SQLServerExpress和SQLServer2005上的多个表中读取的知识,让您更了解sqlserver事务的隔离级别的本质,同时也会涉及到如何更有效地

在这里,我们将给大家分享关于事务隔离和从SQL Server Express和SQL Server 2005上的多个表中读取的知识,让您更了解sqlserver事务的隔离级别的本质,同时也会涉及到如何更有效地SQL Server 2019 Express:读取/写入 SQL Server 数据库(无服务器) - 在 SSMS 中工作,但在 INSERT 触发器中失败、sql-server – SQL Server 2008 R2 Express权限 – 无法创建数据库或修改用户、sql-server – SQL Server 2008 R2与SQL Server 2008 R2 Express、sql-server – SQL Server 2014 Express中的SQLCMD.EXE在哪里?的内容。

本文目录一览:

事务隔离和从SQL Server Express和SQL Server 2005上的多个表中读取(sqlserver事务的隔离级别)

事务隔离和从SQL Server Express和SQL Server 2005上的多个表中读取(sqlserver事务的隔离级别)

我有一个带有主表的数据库(让我们称之为所有者)和几个带有馆藏的子表(例如汽车,书籍等)。

例如:

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

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

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

我已经设定

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

但是我还是有一些问题。

如果我通过运行两个线程来强调数据库,一个线程随机地插入或删除,而另一个读取有时会得到不一致的结果,例如Cars在读取Owners和读取Cars表之间被删除了。

我有几个问题:

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

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

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

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

    Begin TranSelect owner_id From OwnerSelect owner_id, brand From CarsSelect owner_id, title, author From BooksCommit Tran

无论我做什么,有时我都会得到拥有零辆汽车或零本的所有者。这绝不应该发生,因为所有插入和删除都在单个事务中。我似乎快递服务器不会同时锁定Owner,Cars和Books语句。

在联网的SQL Server 2005上,它可以正常工作,但是可能是由于连接速度较慢,因此降低了同时执行的可能性。

  1. 在我的本地数据库上,我Select将从所有表中的虚拟对象开始每个事务,以防止死锁。我不明白为什么这可以防止死锁,但不能防止对表的修改。在联网的SQL Server 2005上这不是必需的。

目前,我无法判断我是否对事务隔离有误解,或者是SQL Server Express和SQL Server 2005之间存在差异的问题。我们将不胜感激。

答案1

小编典典

您一次性加载所有数据的选择意味着很少的选择:

  • 使用sp_getapplock通过相关代码序列化访问
  • 在事务读取中使用TABLOCKX,HOLDLOCK

您有问题,因为SET TRANSACTION ISOLATION LEVEL SERIALIZABLE仅会影响锁的 隔离 :您需要控制 持续时间
HOLDLOCK)和 粒度 + 模式TABLOCKX

SQL Server 2019 Express:读取/写入 SQL Server 数据库(无服务器) - 在 SSMS 中工作,但在 INSERT 触发器中失败

SQL Server 2019 Express:读取/写入 SQL Server 数据库(无服务器) - 在 SSMS 中工作,但在 INSERT 触发器中失败

我一直在努力使用 SQL Server Express 数据库上的触发器来验证传入记录,然后将其写入我的 Azure SQL 数据库(无服务器)。

最初,我在 SSMS(19.0 预览版 2)中将“触发 t-sql”代码作为标准查询运行;它成功了,并将 50k 条记录传输到 Azure SQL 数据库中。

然后我更新了这个 T-SQL 代码以引用 [inserted] 表,并手动插入了一行 - 无论我在使用/不使用游标、变量、BEGIN DISTRIBUTED TRANSACTION不同用户等方面做了什么,触发器都无法插入而相同的进程作为来自 SSMS 的查询运行。

然后我将 INSERT 触发器简化为一个简单的:

CREATE TRIGGER [dbo].[tc_table_ITrig]
ON [dbo].[tc_table]
AFTER INSERT
AS
BEGIN
    INSERT INTO [SQL_Database].[DatabaseName].[schema].[Table]([Var1],[Var2],[Var3],[Var4])
        SELECT 1,2,3,4
END;
GO

如果我在 SSMS 中运行该语句,它会成功

如果我插入[dbo].[tc_table](启动触发器)插入失败并显示以下消息:

链接服务器“SQL_Database”的 OLE DB 提供程序“MSOLEDBSQL”返回消息“参数不正确。”。

消息 7399,级别 16,状态 1,过程 tc_positions_ITrig,第 13 行 [批处理开始行 0]
链接服务器“SQL_Database”的 OLE DB 提供程序“MSOLEDBSQL”报告错误。提供者报告一个或多个参数无效。

消息 7391,级别 16,状态 2,过程 tc_table_ITrig,第 13 行 [批处理开始行 0]
由于链接服务器“SQL_Database”的 OLE DB 提供程序“MSOLEDBSQL”无法开始分布式事务,因此无法执行操作。

我真诚地希望有人可以在这方面给我指导;我已经为此苦苦挣扎了一个多月。

sql-server – SQL Server 2008 R2 Express权限 – 无法创建数据库或修改用户

sql-server – SQL Server 2008 R2 Express权限 – 无法创建数据库或修改用户

最近刚刚升级到sql Server 2008 R2 Express.当我尝试使用 Windows身份验证使用我的id roger.moore登录后创建数据库时,我收到此错误:

An exception occurred while executing a Transact-sql statement or batch. (Microsoft.sqlServer.ConnectionInfo)
CREATE DATABASE permission denied in database ‘master’. RESTORE HEADERONLY is terminating abnormally Error 262

如果我尝试将系统管理员角色添加到roger.moore,这是我收到的错误:

Add member Failed for ServerRole ‘sysadmin’. (Microsoft.sqlServer.Smo)
An exception occurred while executing a Transact-sql statement or batch. (Microsoft.sqlServer.ConnectionInfo)
User does not have permission to perform this action Error 15247

如果我尝试使用T-sql将此角色添加到我的用户,使用此命令,

EXEC sp_addsrvrolemember 'ziffenergy\roger.moore','sysadmin';
GO

这是我收到的错误:

Msg 15247,Level 16,State 1,Procedure sp_addsrvrolemember,Line 29
User does not have permission to perform this action.

有没有人有什么建议?看来我不能在本地机器上的数据库做任何事情.请注意,我是我正在使用的Windows 7工作站的管理员,如果我尝试使用sql Server Management Studio在我们的网络IT测试数据库服务器上创建或修改数据库和/或用户,我可以做到这一点没有问题.

解决方法

您可能是工作站上的管理员,但这对sql Server来说意味着什么.您的登录必须是sysadmin角色的成员才能执行相关操作.默认情况下,本地管理员组不再添加到sql 2008 R2中的sysadmin角色.您需要使用别的东西(例如sa)登录才能授予您自己的权限.

sql-server – SQL Server 2008 R2与SQL Server 2008 R2 Express

sql-server – SQL Server 2008 R2与SQL Server 2008 R2 Express

付费和免费版MSsql2008R2之间有什么区别?
Microsoft sql Server 2008 R2
http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx
和Microsoft sql Server 2008 R2 Express
http://www.microsoft.com/express/Database/
一个完整的答案可以解释为什么有人会选择一个而不是另一个,最大的烦恼是快递,非直观的事情要注意等等.

解决方法

执行摘要(运行小型数据库的人通常遗漏的功能):

缺少sql 2008 R2 Express版:

> sql Server代理(用于调度作业,包括sql复制)
>支持DB> 10GB
>整合服务

还有许多其他差异,详见URL Moose发布.

可以从网络访问sql Express,但默认情况下不启用它.快速谷歌将展示如何

sql-server – SQL Server 2014 Express中的SQLCMD.EXE在哪里?

sql-server – SQL Server 2014 Express中的SQLCMD.EXE在哪里?

使用“sqlCMD.EXE”来备份我的sql Server Express数据库多年来我发现在安装 2014 version之后,我再也找不到sqlCMD.EXE了.

在之前的版本中它位于

C:\Program Files\Microsoft sql Server\110\Tools\Binn\sqlCMD.EXE

但是在我的2014安装中,没有sqlCMD.EXE

C:\Program Files\Microsoft sql Server\120\Tools\Binn

我的问题:

有没有机会让sqlCMD.EXE进入sql Server Express 2014?

解决方法

在 Microsoft Connect发现这个:

According to this page on MSDN
07001,
sqlcmd.exe and bcp.exe are Now in < Install Directory >\Client
SDK\ODBC\110\Tools\Binn

实际上,sqlcmd.exe和bcp.exe都在我的机器中的该文件夹中.

确保已安装Client SDK Tools.

今天关于事务隔离和从SQL Server Express和SQL Server 2005上的多个表中读取sqlserver事务的隔离级别的讲解已经结束,谢谢您的阅读,如果想了解更多关于SQL Server 2019 Express:读取/写入 SQL Server 数据库(无服务器) - 在 SSMS 中工作,但在 INSERT 触发器中失败、sql-server – SQL Server 2008 R2 Express权限 – 无法创建数据库或修改用户、sql-server – SQL Server 2008 R2与SQL Server 2008 R2 Express、sql-server – SQL Server 2014 Express中的SQLCMD.EXE在哪里?的相关知识,请在本站搜索。

本文标签: