在这里,我们将给大家分享关于事务隔离和从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 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事务的隔离级别)
我有一个带有主表的数据库(让我们称之为所有者)和几个带有馆藏的子表(例如汽车,书籍等)。
例如:
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
表之间被删除了。
我有几个问题:
- 一张一张地从多个表中进行读取时,防止修改的正确方法是什么?在读取所有表之前,不得修改表。
我正在使用SQL Server 2005(在网络上)和SQL Server 2005 Express(在本地)。我可以同时显式地获取多个表的锁吗?
- 如果我在本地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上,它可以正常工作,但是可能是由于连接速度较慢,因此降低了同时执行的可能性。
- 在我的本地数据库上,我
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 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权限 – 无法创建数据库或修改用户
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 – SQL Server 2008 R2与SQL Server 2008 R2 Express
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在哪里?
在之前的版本中它位于
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?
解决方法
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在哪里?的相关知识,请在本站搜索。
本文标签: