基本sql语法如何引用数据库?

时间:2018-06-24 20:55:59

标签: sql sql-server

仅当我在顶部包括前缀“ 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')

2 个答案:

答案 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.为列表框(左侧,顶部)选择数据库 请注意,“使用”命令比列表框方法更强大。 希望我能帮上忙。 祝你好运!