Sql server 如果我只有对数据库的读取权限,如何在SSMS中构建嵌套查询?

Sql server 如果我只有对数据库的读取权限,如何在SSMS中构建嵌套查询?,sql-server,ssms,ssms-2012,Sql Server,Ssms,Ssms 2012,我刚刚开始学习SQLServerManagementStudio。我熟悉在Access中构建嵌套查询,例如: Query1(获取数据集) Query2(仅返回Query1中最小值为b的行) 这使得调试代码变得更容易,因为如果Query1出现问题,我只需在一个位置而不是三个位置进行更改 我知道,如果我有对数据库的写访问权,我可以创建视图和/或存储过程来帮助实现这一点。但在本例中,我具有只读访问权限 SSMS中是否有一种方法可以保存一个查询,然后在另一个查询中按名称引用该查询?您可以使用CTE在“会

我刚刚开始学习SQLServerManagementStudio。我熟悉在Access中构建嵌套查询,例如:

Query1
(获取数据集)

Query2
(仅返回
Query1
中最小值为
b
的行)

这使得调试代码变得更容易,因为如果
Query1
出现问题,我只需在一个位置而不是三个位置进行更改

我知道,如果我有对数据库的写访问权,我可以创建视图和/或存储过程来帮助实现这一点。但在本例中,我具有只读访问权限


SSMS中是否有一种方法可以保存一个查询,然后在另一个查询中按名称引用该查询?

您可以使用CTE在“会话”中执行此操作,但如果没有写访问权限,则无法将任何对象保存到数据库中

WITH q2 AS
    (select a,min(b) as min_b from Query1 group by a)

select q1.* from 
Query1 q1
inner join
q2
on
q1.a=q2.a
and
q1.b=q2.min_b

SELECT * FROM q2

SELECT TOP 1000 * FROM q2

您还可以创建自定义模板(视图/模板资源管理器),并使用它保存易于访问的代码位(如果需要)。查看模板资源管理器,我将CTE保存在何处以便于查询?对不起,我的意思是保存自定义模板如果将模板复制到SMSS查询窗口中,则模板中定义的CTE将可供您的查询访问。模板只是文本片段。它不是一个实际的可引用数据库对象。如果没有足够的访问权限,则无法将可重用对象保存到数据库中。解决方法是创建一个您确实有权访问的新数据库。您可以将所有对象保存在此处,然后跨数据库引用。您甚至可以通过在源数据库中创建对象的同义词,在自己的沙箱数据库中创建源数据库的“副本”。您有在同一台服务器上创建数据库的选项吗?
select q1.* from Query1 q1
inner join
(select a,min(b) as min_b from Query1 group by a) q2
on
q1.a=q2.a
and
q1.b=q2.min_b
WITH q2 AS
    (select a,min(b) as min_b from Query1 group by a)

select q1.* from 
Query1 q1
inner join
q2
on
q1.a=q2.a
and
q1.b=q2.min_b

SELECT * FROM q2

SELECT TOP 1000 * FROM q2