我需要限制对特定用户的访问,但他们仍然需要能够查看 dbo 拥有的表中的数据。
我正在尝试执行以下操作:
这是我尝试过的:
但是,在以 user1 身份登录时使用以下语句:
EXEC get_profiles 1
Run Code Online (Sandbox Code Playgroud)
结果是:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过WITH EXECUTE AS OWNER并且无法开始理解“所有权链接”应该如何工作。
我也试过
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO …Run Code Online (Sandbox Code Playgroud) 为什么 SQL Server 在运行使用子查询的查询时使用并行性,但在使用连接时不使用并行性?加入版本串行运行,需要大约 30 倍的时间才能完成。
加入版本:~30secs

子查询版本:<1 秒

编辑: Xml 版本的查询计划:
我一直在尝试解决无法查看 SQL Server 2012 数据库中某些表的登录问题。在这样做时,我发现我不太了解db_owner角色中的成员资格允许的内容。我可以理解其他角色,db_datareader and db_datawriter但我对db_owner允许的内容仍然感到困惑。
假设我有两个查询,在 SSMS 中的两个单独会话中运行:
第一节:
UPDATE Person
SET Name='Jonny', Surname='Cage'
WHERE Id=42
Run Code Online (Sandbox Code Playgroud)
第二场:
SELECT Name, Surname
FROM Person WITH(NOLOCK)
WHERE Id > 30
Run Code Online (Sandbox Code Playgroud)
SELECT语句是否有可能读取半更新的行,例如带有Name = 'Jonny'和的行Surname = 'Goody'?
查询几乎在不同的会话中同时执行。
我需要创建一些涉及层次结构的测试数据。我可以让它变得简单并做几个CROSS JOINs,但这会给我一个完全统一/没有任何变化的结构。这不仅看起来很乏味,而且测试数据缺乏变化有时会掩盖原本会发现的问题。所以,我想生成一个遵循以下规则的非统一层次结构:
WHILE循环可以很容易地做到这一点,但首选是找到一种基于集合的方法。一般而言,生成测试数据没有生产代码对效率的要求,但尝试基于集合的方法可能会更具教育意义,并有助于在未来找到基于集合的方法来解决问题。因此WHILE,不排除循环,但只有在不可能使用基于集合的方法时才能使用循环。我看过这个问题 SSIS 2012 - How to Query Current Running Packages in T-SQL?
它给了我以下脚本:
SELECT
E.execution_id
, E.folder_name
, E.project_name
, E.package_name
, E.reference_id
, E.reference_type
, E.environment_folder_name
, E.environment_name
, E.project_lsn
, E.executed_as_sid
, E.executed_as_name
, E.use32bitruntime
, E.operation_type
, E.created_time
, E.object_type
, E.object_id
, E.status
, E.start_time
, E.end_time
, E.caller_sid
, E.caller_name
, E.process_id
, E.stopped_by_sid
, E.stopped_by_name
, E.dump_id
, E.server_name
, E.machine_name
, E.total_physical_memory_kb
, E.available_physical_memory_kb
, E.total_page_file_kb
, E.available_page_file_kb
, E.cpu_count
, F.folder_id
, …Run Code Online (Sandbox Code Playgroud) 我需要确定 SQL Server 中日期范围“1.1.1996 - 30.8.2014”的“每个月的第三个星期五”的日期。
我希望我应该使用的组合DENSE_RANK(),并PARTITION BY()以一套“等级= 3”。但是,我是 SQL 新手,无法找到正确的代码。
表#01 Status:
StatusID Status
-----------------------
1 Opened
2 Closed
3 ReOpened
4 Pending
Run Code Online (Sandbox Code Playgroud)
表#02 Claims:
ClaimID CompanyName StatusID
--------------------------------------
1 ABC 1
2 ABC 1
3 ABC 2
4 ABC 4
5 XYZ 1
6 XYZ 1
Run Code Online (Sandbox Code Playgroud)
预期结果:
CompanyName TotalOpenClaims TotalClosedClaims TotalReOpenedClaims TotalPendingClaims
--------------------------------------------------------------------------------
ABC 2 1 0 1
XYZ 2 0 0 0
Run Code Online (Sandbox Code Playgroud)
我需要如何编写查询才能按预期获得结果?
我无法理解 DB Session 状态的含义。我搜索了一些参考资料,但没有得到任何帮助。任何人都可以解释这些状态(可运行、睡眠、暂停、运行和后台)的实际含义,这对我有很大帮助。提前致谢。
sql-server ×10
concurrency ×1
date ×1
date-format ×1
hierarchy ×1
join ×1
pivot ×1
random ×1
security ×1
ssis ×1
ssis-2014 ×1
subquery ×1
t-sql ×1