Sql server 在VisualStudio中使用报表服务器项目向导(SSDT)对每个数据库运行查询
我需要在Visual Studio中的报表服务器项目向导(SSDT)中运行下面的查询,以将给定的数据导出到Excel/PDF。此查询将对实例中的所有数据库重复执行,但是,在使用报表服务器项目向导时,它仅运行1 DB。通过SSMS运行时,它正在成功运行并为所有数据库提供数据。在使用报表服务器项目向导时,可以使用什么来代替sp_MSforeachdb,因为报表服务器项目向导中没有查询所有数据库的选项Sql server 在VisualStudio中使用报表服务器项目向导(SSDT)对每个数据库运行查询,sql-server,Sql Server,我需要在Visual Studio中的报表服务器项目向导(SSDT)中运行下面的查询,以将给定的数据导出到Excel/PDF。此查询将对实例中的所有数据库重复执行,但是,在使用报表服务器项目向导时,它仅运行1 DB。通过SSMS运行时,它正在成功运行并为所有数据库提供数据。在使用报表服务器项目向导时,可以使用什么来代替sp_MSforeachdb,因为报表服务器项目向导中没有查询所有数据库的选项 use master DECLARE @command varchar(1000) SELECT
use master
DECLARE @command varchar(1000)
SELECT @command = 'use ?
if DB_ID("?")>4
select DB_NAME() as ''Database_Name'',name as ''DB_user'',type_desc,default_schema_name,create_date
from sys.database_principals
where type!=''C'' and type!=''R'''
EXEC sp_MSforeachdb @command
每次调用
sp_MSforeachdb
的结果都需要保存到临时表中。在此之后,执行最后一次选择返回所有数据库的结果,如下例所示,使用本地临时表。虽然表中的行的顺序很可能会从插入中保留下来,但如果没有显式的orderby
,则无法保证这一点。假设您要显示按数据库排序的结果,可以按如下方式执行
DECLARE @command varchar(1000)
SELECT @command = 'use ?
if DB_ID("?")>4
select DB_NAME() as ''Database_Name'',name as ''DB_user'',type_desc,default_schema_name,create_date
from sys.database_principals
where type!=''C'' and type!=''R'''
IF (OBJECT_ID(N'TEMPDB.DBO.#TEMP') IS NOT NULL)
BEGIN
DROP TABLE #TEMP
END
CREATE TABLE #TEMP
(
DatabaseName VARCHAR(50),
DB_User VARCHAR(50),
TypeDesc VARCHAR(25),
DefaultSchemaName VARCHAR(50),
CreateDate DATETIME
)
INSERT INTO #TEMP
EXEC sp_MSforeachdb @command
SELECT
DatabaseName
DB_User,
TypeDesc,
DefaultSchemaName,
CreateDate
FROM #TEMP
ORDER BY DatabaseName
每次调用sp_MSforeachdb
的结果都需要保存到临时表中。在此之后,执行最后一次选择返回所有数据库的结果,如下例所示,使用本地临时表。虽然表中的行的顺序很可能会从插入中保留下来,但如果没有显式的orderby
,则无法保证这一点。假设您要显示按数据库排序的结果,可以按如下方式执行
DECLARE @command varchar(1000)
SELECT @command = 'use ?
if DB_ID("?")>4
select DB_NAME() as ''Database_Name'',name as ''DB_user'',type_desc,default_schema_name,create_date
from sys.database_principals
where type!=''C'' and type!=''R'''
IF (OBJECT_ID(N'TEMPDB.DBO.#TEMP') IS NOT NULL)
BEGIN
DROP TABLE #TEMP
END
CREATE TABLE #TEMP
(
DatabaseName VARCHAR(50),
DB_User VARCHAR(50),
TypeDesc VARCHAR(25),
DefaultSchemaName VARCHAR(50),
CreateDate DATETIME
)
INSERT INTO #TEMP
EXEC sp_MSforeachdb @command
SELECT
DatabaseName
DB_User,
TypeDesc,
DefaultSchemaName,
CreateDate
FROM #TEMP
ORDER BY DatabaseName
创建一个临时表/变量,并将每个表/变量的结果插入其中。然后从该表中选择以返回单个resultset中所有数据库的结果。创建一个临时表/变量,并将每个数据库的结果插入其中。然后从该表中选择以返回单个resultset中所有数据库的结果。