Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为我们的网络创建数据库目录_Sql_Sql Server - Fatal编程技术网

Sql 为我们的网络创建数据库目录

Sql 为我们的网络创建数据库目录,sql,sql-server,Sql,Sql Server,这个项目的最终产品是为我们所有的服务器创建一个数据库目录。它需要是动态的,这样当我们更改服务器的名称和位置时,我们仍然可以报告它们。通常,我们希望创建一个包含服务器名、数据库名、表名和列名的表。在那里,我将使用报表设计器以管理人员希望的方式显示结果 我的想法是使用Excel工作表作为服务器名称列表。从那里我应该可以查询所有其他的信息。在下面的代码中,我将手动填充服务器名称 现在,我的代码将获得第一行信息:第一个服务器名、第一个数据库名、第一个表名、第一个列名。接下来我需要它为第一个表中的每个列名

这个项目的最终产品是为我们所有的服务器创建一个数据库目录。它需要是动态的,这样当我们更改服务器的名称和位置时,我们仍然可以报告它们。通常,我们希望创建一个包含服务器名、数据库名、表名和列名的表。在那里,我将使用报表设计器以管理人员希望的方式显示结果

我的想法是使用Excel工作表作为服务器名称列表。从那里我应该可以查询所有其他的信息。在下面的代码中,我将手动填充服务器名称

现在,我的代码将获得第一行信息:第一个服务器名、第一个数据库名、第一个表名、第一个列名。接下来我需要它为第一个表中的每个列名创建一行,然后转到下一个表,直到该数据库中的所有表都完成,然后移动到下一个数据库,直到所有数据库都完成,然后移动到下一个服务器。我想我已经掌握了所有的基本知识,但是在子查询方面需要帮助

--- Drop and recreate the Servers_To_Catalog table if it exists.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Servers_To_Catalog]') AND TYPE IN (N'U'))
DROP TABLE [dbo].[Servers_To_Catalog]
go

CREATE TABLE dbo.Servers_To_Catalog (ServerName nvarchar(50), Comment nvarchar(200));
GO

--------------------------------------------------------------------------------------------------------------------

--- Populate the Servers_To_Catalog table from an Excel sheet or manually below
Insert Into Servers_To_Catalog (ServerName) values ('CESDBS_OLD')
Insert Into Servers_To_Catalog (ServerName) values ('CESDBS')
Insert Into Servers_To_Catalog (ServerName) values ('DBS2000')
Insert Into Servers_To_Catalog (ServerName) values ('CESOES')
Insert Into Servers_To_Catalog (ServerName) values ('CESROUTE')
Insert Into Servers_To_Catalog (ServerName) values ('CESBS')
Insert Into Servers_To_Catalog (ServerName) values ('WHDBS')
Insert Into Servers_To_Catalog (ServerName) values ('CESDATA')

----------------------------------------------------------------------------------------------------------------------

--- Drop and recreate the temporary Database_Locations table if it exists.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Database_Locations]') AND TYPE IN (N'U'))
DROP TABLE [dbo].[Database_Locations]
go

CREATE TABLE dbo.Database_Locations (ServerName nvarchar(50), DBName nvarchar(50), TableName nvarchar(50), ColumnName nvarchar(50));
GO

----------------------------------------------------------------------------------------------------------------------

--- Bring in the server names from the Servers_To_Catalog table as @SName.
DECLARE @SName NVARCHAR(50)
SELECT @SName = ServerName
From dbo.Servers_To_Catalog


--- Bring in the names of the databases on a given server as @DName, excluding system databases.
DECLARE @DName NVARCHAR (50)
SELECT @DName = NAME
From sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')

--- Bring in the names of the tables for a given database as @TName
DECLARE @TName NVARCHAR(50) 
SELECT @TName = NAME
FROM sys.Tables


--- Use @TName to get the list of columns
Declare @CName NVarchar(50)
SELECT @CNAME = NAME
From syscolumns
Where id = object_id(@TName)

---Write row to Database_Locations table
Insert into dev.dbo.Database_Locations (ServerName, DBName, TableName, ColumnName)  Select @SName, @DName, @TName, @CName 

啊。格式粘贴得乱七八糟。我希望你能理解。这里有什么问题?有什么问题?你想实现什么(我不是说你的整个系统应该做什么,而是说你想从这些具体的查询中得到什么)以及你现在从查询中得到什么?显示初始数据(比如:我有数据库A和表B、C,数据库A1和表B1、C1)和期望的结果(比如:我想有一个查询,它给出(A、B)(A1、B1))。