Questions tagged «azure-sql-database»

Azure SQL数据库是Microsoft的关系数据库即服务。该标签用于询问有关Azure SQL数据库的问题,而不是有关Azure VM中托管的SQL Server(使用azure-vm)的问题。

1
巨大(100,000,000+)表的GROUP TOP(1)BY GROUP
设定 我有一个约115,382,254行的巨大表。该表相对简单,并且记录了应用程序的处理操作。 CREATE TABLE [data].[OperationData]( [SourceDeciveID] [bigint] NOT NULL, [FileSource] [nvarchar](256) NOT NULL, [Size] [bigint] NULL, [Begin] [datetime2](7) NULL, [End] [datetime2](7) NOT NULL, [Date] AS (isnull(CONVERT([date],[End]),CONVERT([date],'19000101',(112)))) PERSISTED NOT NULL, [DataSetCount] [bigint] NULL, [Result] [int] NULL, [Error] [nvarchar](max) NULL, [Status] [int] NULL, CONSTRAINT [PK_OperationData] PRIMARY KEY CLUSTERED ( [SourceDeviceID] ASC, [FileSource] …

3
使用共享登录名时,如何知道用户对审核表执行删除操作?
背景资料: 我正在创建审核表的集合,以跟踪对我的应用程序的一组数据表的更新和删除。 审计记录是通过触发器创建的。 我的应用程序数据库中的DML通常来自服务用于进入数据库的登录名。因此,我认为SYSTEM_USER在触发器中调用时,结果始终是相同的。 我的应用程序当前不存储用户数据,尽管UserId每次执行DML时都会为其分配一个字符串(仅在存储过程中完成)。 我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,所以我不想看到所有操作都是由服务完成的,所以我想看看哪个用户做了。这不是更新的问题,因为我们有一些ModifiedBy列会通过发送更新来UserId更新。 问题是:SYSTEM_USER运行删除操作时,有没有办法将用户信息设置为或以其他方式使用户信息进入触发器? 我现在拥有的“最佳”想法(尽管我不确定这是否是一个好主意)是,在服务中,我检查是否当前UserId作为用户存在于数据库中,如果不是,则创建一个用户为他们反对。然后使用运行存储过程EXECUTE AS User = @UserId。然后,当在存储过程中完成DML并触发触发器时,SYSTEM_USER应从中返回用户EXECUTE AS。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.