【问题标题】:schema and database in sql serversql server 中的模式和数据库
【发布时间】:2013-09-25 21:25:00
【问题描述】:

正如link 所说,架构和数据库可以是 ;

schema : database : table :: floor plan : house : room

但应该是这样的;

database : schema : table :: house : floor plan: room.

哪一个是正确的?我像第二个选项一样使用;

exec xp_cmdshell 'bcp "select * from test2.dbo.test" queryout I:\File\mytest.xlsx -c -t -T -S YAMUNA\SQLEXPRESS'

这里数据库:test2;架构:dbo;和表:test

【问题讨论】:

  • Sql Server 和 (Oracle/MySQL) 的概念略有不同。您需要指定更具体的 RDMBS。
  • 那个链接真的不是在谈论sqlserver语法。它甚至没有以 sqlserver 使用它的方式谈论模式。它根本不相关。用数据库模型替换模式,它应该明确为database model : database : table

标签: sql-server schema


【解决方案1】:

忽略那个链接,它不是在谈论 SQL Server 对象寻址约定。另外,他们在谈论“Schema”的传统/正式含义,即“任何关系数据设计”,而在 SQL Server 中,“Schema”通常是“Owner-Schema”的缩写,它是特定类型的安全对象。

相反,它是在对关系设计的层次或元素进行类比。这里的“:”符号是一个概念与另一个概念的相对关系,“::”是类比符号。

所以schema:database:table :: floor plan:house:room 只是表示“模式、数据库和表之间的关系类似于平面图、房屋和房间之间的关系”。 (在英语中有一种更常见和更简洁的表达方式,但对于非母语人士来说往往会造成混淆)

请注意,这些概念的具体顺序无关紧要,只要它们对应的元素(schema-floor plan、database-house、room-table)具有相同的相对位置即可。所以schema:database:table :: floor plan:house:roomdatabase:schema:table :: house:floor plan:room 是一样的。

【讨论】:

    【解决方案2】:

    正确答案是schema : database : table :: floor plan : house : room。一个房子(数据库)可以包含许多楼层,然后是许多平面图(模式)。在每个楼层内,可以有多个该楼层独有的房间(桌子)。

    DBO 的特殊之处在于它是数据库所有者的架构。可以将其他架构添加到该数据库中。

    【讨论】:

      【解决方案3】:

      下面的代码来自blog article我写的使用BCP转储数据。

      这里有一些与你所拥有的不同的注意事项。

      1 - 应该将路径提供给 bcp,因为它可能找不到。

      2 - 我注意到您添加了 *.xlsx 扩展名,即使它是逗号分隔值 (csv) 格式。我建议使用 *.csv 扩展名。

      3 - 此外,您需要在 '-t,' 分隔符开关之后提供一个字符。下面使用十六进制值。此处的示例使用逗号。

      4 - 最后但并非最不重要的一点是,我看到您在文件名周围缺少“”。

      请解决这些问题,然后重试。如果仍然没有骰子。使用我创建字符串的代码。使用打印命令。

      尝试从命令行调用。如果它在那里不起作用,它将无法在 SQL Server 中运行。

      祝你好运。

      约翰·米纳

      www.craftydba.com

      PS:如果仍有问题,请发布命令执行的输出。

      PPS:应该已经为现有数据库修复了架构。只是问你 DBA 的语法,除非你是偶然的 DBA?

      -- BCP - Export query, pipe delimited format, trusted security, character format
      DECLARE @bcp_cmd4 VARCHAR(1000);
      DECLARE @exe_path4 VARCHAR(200) = 
          ' cd C:\Program Files\Microsoft SQL Server\100\Tools\Binn\ & ';
      SET @bcp_cmd4 =  @exe_path4 + 
          ' BCP.EXE "SELECT FirstName, LastName FROM AdventureWorks2008R2.Sales.vSalesPerson" queryout ' +
          ' "C:\TEST\PEOPLE.TXT" -T -c -q -t0x7c -r\n';
      PRINT @bcp_cmd4;
      EXEC master..xp_cmdshell @bcp_cmd4;
      GO
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多