仅当我在顶部包括前缀“ use”时,我才能使以下代码满足我的需要。当我尝试在“ where”子句中包含数据库的名称时,我没有成功(将获得列标题并且没有行)。
在不使用“ use”的情况下需要使用什么语法来引用数据库对象?
(注意:这个问题是出于我自己的好奇心。“ use”前缀有效地解决了我运行元数据查询的问题。)
use [Investment Data 1]
SELECT
c.name 'Column Name',
t.Name 'Data type',
c.max_length 'Max Length',
c.precision ,
c.scale ,
c.is_nullable,
ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
c.object_id = OBJECT_ID('dbo.hurricane_landfall_2017')
答案 0 :(得分:1)
您可以将数据库名称添加到每个对象,SQL Server中有四部分的命名语法:server.database.schema.object
SELECT
c.name 'Column Name',
t.Name 'Data type',
c.max_length 'Max Length',
c.precision ,
c.scale ,
c.is_nullable,
ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM
[Investment Data 1].sys.columns c
INNER JOIN
[Investment Data 1].sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
[Investment Data 1].sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
[Investment Data 1].sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
c.object_id = OBJECT_ID('dbo.hurricane_landfall_2017')
答案 1 :(得分:0)
在使用的每个查询中,必须设置要sql-server进入的数据库。 我们有2种方法: 1.“使用”命令(就像您写的一样) 2.为列表框(左侧,顶部)选择数据库 请注意,“使用”命令比列表框方法更强大。 希望我能帮上忙。 祝你好运!