A. 代码页的sql相关
支持两类字符数据类型:
Unicode 数据类型
nchar、nvarchar 和 ntext。这些数据类型使用 Unicode 字符表示法。代码页不适用于这些数据类型。
非 Unicode 字符数据类型
char、varchar 和 text。这些数据类型使用单字节或双字节代码页中定义的字符表示法。
有关字符数据的存储方式以及代码页、Unicode 和排序次序操作的更多信息,请参见在 MSDN 页中的 Developing International Software for Windows 95 and Windows NT 4.0。
国际化数据和 Unicode
当只使用字符数据和代码页时,在一个数据库内很难以多种语言存储数据。很难为数据库找到一种代码页,能够存储所需全部语言特有的字符。对于运行各种代码页的不同客户端所读取和更新的特殊字符,要确保正确地转换也很困难。支持国际化客户端的数据库应始终使用 Unicode 数据,而不应使用非 Unicode 数据类型。
例如,北美洲客户的数据库必须处理三种主要语言:
墨西哥使用的西班牙文名称和地址。
魁北克使用的法文名称和地址。
加拿大的其余地区和美国使用的英文名称和地址。
当只使用字符列和代码页时须小心,以确保数据库所安装的代码页能够处理这三种语言的字符。当其中一种语言的字符由运行另一种语言的代码页的客户端读取时,必须更加小心以确保能够正确转换字符。
B. 如何在一条sql语句中连接远程数据库,sql server 2000
建议使用链接服务器
在一条sql语句中连接远程数据库可以使用OpenRowSet函数,下例即在语句中以Jet4.0接口链接了远程数据库Northwind.mdb,其他数据库可参考其接口参数修改。
USE Northwind
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)
AS o
ON c.CustomerID = o.CustomerID
GO
以下是SQL Server 2005 联机丛书资料,对Sql server 2000 依然有效。
OPENROWSET (Transact-SQL)
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的临时方法。对于较频繁引用 OLE DB 数据源的情况,请改为使用链接服务器。有关详细信息,请参阅链接服务器。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 访问接口的功能,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,但 OPENROWSET 只返回第一个结果集。
OPENROWSET 还通过内置的 BULK 访问接口支持大容量操作,正是有了该访问接口,才能从文件读取数据并将数据作为行集返回。
Transact-SQL 语法约定
语法
OPENROWSET
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog. ] [ schema. ] object
| 'query'
}
| BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
} )
<bulk_options> ::=
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , ERRORFILE = 'file_name' ]
[ , FIRSTROW = first_row ]
[ , LASTROW = last_row ]
[ , MAXERRORS = maximum_errors ]
[ , ROWS_PER_BATCH = rows_per_batch ]
参数
' provider_name '
字符串,表示在注册表中指定的 OLE DB 访问接口的友好名称(或 PROGID)。provider_name 没有默认值。
' datasource '
对应于特定 OLE DB 数据源的字符串常量。datasource 是要传递给访问接口的 IDBProperties 接口的 DBPROP_INIT_DATASOURCE 属性,该属性用于初始化访问接口。通常,该字符串包含数据库文件的名称、数据库服务器的名称,或者访问接口能理解的用于定位数据库的名称。
' user_id '
字符串常量,它是传递给指定 OLE DB 访问接口的用户名。user_id 为连接指定安全上下文,并作为 DBPROP_AUTH_USERID 属性传入以初始化访问接口。user_id 不能是 Microsoft Windows 登录名称。
' password '
字符串常量,它是传递给 OLE DB 访问接口的用户密码。在初始化访问接口时,password 作为 DBPROP_AUTH_PASSWORD 属性传入。password 不能是 Microsoft Windows 密码。
' provider_string '
访问接口特定的连接字符串,作为 DBPROP_INIT_PROVIDERSTRING 属性传入以初始化 OLE DB 访问接口。通常 provider_string 封装初始化访问接口所需的所有连接信息。有关 SQL Native Client OLE DB 访问接口可识别的关键字列表,请参阅Initialization and Authorization Properties。
catalog
指定对象所在的目录或数据库的名称。
schema
架构的名称或指定对象的对象所有者名称。
object
对象名,它唯一地标识出将要操作的对象。
' query '
字符串常量,发送到访问接口并由访问接口执行。SQL Server 的本地实例不处理该查询,但处理由访问接口返回的查询结果(传递查询)。有些访问接口并不通过表名而是通过命令语言提供其表格格式数据,将传递查询用于这些访问接口是非常有用的。只要查询访问接口支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持传递查询。有关详细信息,请参阅 SQL Native Client (OLE DB) Reference。
BULK
使用 OPENROWSET 的 BULK 行集访问接口读取文件中的数据。在 SQL Server 2005 中,OPENROWSET 无需将数据文件中的数据加载到目标表,便可读取这些数据。这样便可在单个 SELECT 语句中使用 OPENROWSET。
BULK 选项的参数可对何时开始和结束数据读取、如何处理错误以及如何解释数据提供有效控制。例如,可以指定以类型为 varbinary、varchar 或 nvarchar 的单行单列行集的形式读取数据文件。默认行为详见随后的参数说明。
有关如何使用 BULK 选项的信息,请参阅本主题后面的“备注”部分。有关 BULK 选项所需权限的信息,请参阅本主题后面的“权限”部分。
注意:
当用于以完整恢复模式导入数据时,OPENROWSET (BULK ...) 不优化日志记录。
有关为大容量导入准备数据的信息,请参阅准备用于大容量导出或大容量导入的数据。
' data_file '
数据文件的完整路径,该文件的数据将被复制到目标表中。
FORMATFILE = 'format_file_path'
指定格式化文件的完整路径。SQL Server 2005 支持两种格式化文件类型:XML 和非 XML。
格式化文件对定义结果集中的列类型是必需的。唯一的例外情况是指定 SINGLE_CLOB、SINGLE_BLOB 或 SINGLE_NCLOB 时;在这种情况下,不需要格式化文件。
有关格式化文件的信息,请参阅使用格式化文件大容量导入数据。
< bulk_options >
指定 BULK 选项的一个或多个参数。
CODEPAGE = { 'ACP '| 'OEM '| 'RAW '| 'code_page' }
指定该数据文件中数据的代码页。仅当数据含有字符值大于 127 或小于 32 的 char、varchar 或 text 列时,CODEPAGE 才是适用的。
CODEPAGE 值 说明
ACP
将数据类型为 char、varchar 或 text 的列由 ANSI/Microsoft Windows 代码页 (ISO 1252) 转换为 SQL Server 代码页。
OEM(默认值)
将数据类型为 char、varchar 或 text 的列由系统 OEM 代码页转换为 SQL Server 代码页。
RAW
不执行从一个代码页到另一个代码页的转换。这是执行最快的选项。
code_page
指示编码数据文件中的字符数据所在的源代码页;例如,850。该代码页对 SQL Server 2005 数据库引擎正确解释输入数据是必需的。
ERRORFILE = 'file_name'
指定用于收集格式有误且不能转换为 OLE DB 行集的行的文件。这些行将按原样从数据文件复制到此错误文件中。
错误文件在开始执行命令时创建。如果该文件已存在,将引发一个错误。此外,还创建了一个扩展名为 .ERROR.txt 的控制文件。此文件引用错误文件中的每一行并提供错误诊断。纠正错误后即可加载数据。
FIRSTROW = first_row
指定要加载的第一行的行号。默认值为 1,指示指定数据文件的第一行。通过对行终止符进行计数来确定行号。
LASTROW = last_row
指定要加载的最后一行的行号。默认值为 0,指示指定数据文件中的最后一行。
MAXERRORS = maximum_errors
指定格式化文件中定义的、在 OPENROWSET 引发异常之前可以发生的语法错误或格式有误行的最大数目。在达到 MAXERRORS 之前,OPENROWSET 会忽略每个错误行,不加载它,并将其计为一个错误。
maximum_errors 的默认值为 10。
注意:
MAX_ERRORS 不适用于 CHECK 约束,也不适用于 money 和 bigint 数据类型的转换。
ROWS_PER_BATCH = rows_per_batch
指定数据文件中近似的数据行数量。该值应与实际行数相同。
OPENROWSET 始终以单批形式导入数据文件。但如果将 rows_per_batch 的值指定为 > 0,则查询处理器在查询计划中分配资源时将使用 rows_per_batch 的值作为提示。
默认情况下,ROWS_PER_BATCH 未知。指定 ROWS_PER_BATCH = 0 相当于忽略 ROWS_PER_BATCH。
SINGLE_BLOB
将 data_file 的内容作为类型为 varbinary(max) 的单行单列行集返回。
重要提示:
我们建议您仅使用 SINGLE_BLOB 选项(而不是 SINGLE_CLOB 和 SINGLE_NCLOB)导入 XML 数据,因为只有 SINGLE_BLOB 支持所有的 Windows 编码转换。
SINGLE_CLOB
通过以 ASCII 格式读取 data_file,使用当前数据库的排序规则将内容作为类型为 varchar(max) 的单行单列行集返回。
SINGLE_NCLOB
通过以 UNICODE 格式读取 data_file,使用当前数据库的排序规则将内容作为类型为 nvarchar(max) 的单行单列行集返回。
备注
只有在以下情况下才能使用 OPENROWSET 访问 OLE DB 数据源中的远程数据:指定访问接口的 DisallowAdhocAccess 注册表选项已显式设置为 0,并启用了 Ad Hoc Distributed Queries 高级配置选项。如果未设置这些选项,则默认行为不允许即席访问。
访问远程 OLE DB 数据源时,服务器不会自动委托可信连接的登录标识,客户端通过此登录标识才能连接到正在查询的服务器。必须配置身份验证委托。有关详细信息,请参阅为委托配置链接服务器。
如果 OLE DB 访问接口在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 访问接口并不支持多个目录和架构,那么可以忽略 catalog 和 schema 的值。如果访问接口只支持架构名称,那么必须指定一个格式为 schema.object 的两部分名称。如果访问接口只支持目录名称,那么必须指定一个格式为 catalog.schema.object 的三部分名称。必须为使用 SQL Native Client OLE DB 访问接口的传递查询指定三部分名称。有关详细信息,请参阅 Transact-SQL 语法约定 (Transact-SQL)。
OPENROWSET 不接受参数变量。
使用带有 BULK 选项的 OPENROWSET
以下 Transact-SQL 增强功能支持 OPENROWSET(BULK…) 函数:
与 SELECT 一起使用的 FROM 子句可以调用 OPENROWSET(BULK…) 而非表名,同时可以实现完整的 SELECT 功能。
带有 BULK 选项的 OPENROWSET 在 FROM 子句中需要有一个相关名称,也称为范围变量或别名。可以指定列别名。如果未指定列别名列表,则格式化文件必须具有列名。指定列别名会覆盖格式化文件中的列名,例如:
FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
SELECT...FROM OPENROWSET(BULK...) 语句将直接查询文件中的数据,无需将数据导入表中。SELECT...FROM OPENROWSET(BULK...) 语句还可以通过使用格式化文件指定列名和数据类型,从而列出大容量列别名。
INSERT...SELECT * FROM OPENROWSET(BULK...) 语句将数据文件中的数据大容量导入 SQL Server 表中。有关详细信息,请参阅使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。
OPENROWSET BULK 选项与 INSERT 语句一起使用时,BULK 子句支持表提示。除了 TABLOCK 等常规表提示之外,BULK 子句还可以接受下列专用表提示:IGNORE_CONSTRAINTS(仅忽略 CHECK 和 FOREIGN KEY 约束)、IGNORE_TRIGGERS、KEEPDEFAULTS 和 KEEPIDENTITY。有关详细信息,请参阅表提示 (Transact-SQL)。
有关如何使用 INSERT...SELECT * FROM OPENROWSET(BULK...) 语句的信息,请参阅导入和导出大容量数据。有关何时在事务日志中记录由大容量导入执行的行插入操作的信息,请参阅在大容量导入中按最小方式记录日志的前提条件。
注意:
使用 OPENROWSET 时,请务必了解 SQL Server 2005 是如何处理模拟的。有关安全注意事项的信息,请参阅使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。
大容量导出或导入 SQLXML 文档
若要大容量导出或导入 SQLXML 数据,请在格式化文件中使用下列数据类型之一。
数据类型 效果
SQLCHAR 或 SQLVARYCHAR
在客户端代码页或排序规则隐含的代码页中发送数据。
SQLNCHAR 或 SQLNVARCHAR
以 Unicode 格式发送数据。
SQLBINARY 或 SQLVARYBIN
不经任何转换即发送数据。
权限
OPENROWSET 权限由传递给 OLE DB 访问接口的用户名的权限确定。若要使用 BULK 选项,则需要有 ADMINISTER BULK OPERATIONS 权限。
示例
A. 将 OPENROWSET 用于 SELECT 和 SQL Native Client OLE DB 访问接口
以下示例使用 SQL Native Client OLE DB 访问接口 (SQLNCLI) 访问 HumanResources.Department 表,该表位于远程服务器 Seattle1 上的 AdventureWorks 数据库中。使用 SELECT 语句定义返回的行集。访问接口字符串包含 Server 和 Trusted_Connection 关键字。这些关键字由 SQL Native Client OLE DB 访问接口识别。
复制代码
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks.HumanResources.Department
ORDER BY GroupName, Name') AS a;
B. 使用 Microsoft OLE DB Provider for Jet
以下示例通过 Microsoft OLE DB Provider for Jet 访问 Microsoft Access Northwind 数据库中的 Customers 表。
注意:
该示例假定已经安装了 Access。若要运行该示例,则必须安装 Northwind 数据库。有关如何安装 Northwind 数据库的详细信息,请参阅下载 Northwind 和 pubs 示例数据库。
复制代码
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers)
GO
C. 使用 OPENROWSET 和 INNER JOIN 中的另一个表
以下示例从 SQL Server Northwind 数据库的本地实例中的 Customers 表以及存储在同一计算机上的 Access Northwind 数据库中的 Orders 表选择所有数据。
注意:
该示例假定已经安装了 Access。若要运行该示例,则必须安装 Northwind 数据库。有关如何安装 Northwind 数据库的详细信息,请参阅下载 Northwind 和 pubs 示例数据库。
复制代码
USE Northwind
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)
AS o
ON c.CustomerID = o.CustomerID
GO
D. 使用 OPENROWSET 将文件数据大容量插入 varbinary(max) 列中
以下示例创建一个用于演示的小型表,并将名为 Text1.txt 的文件(位于 C: 根目录)中的文件数据插入 varbinary(max) 列中。
复制代码
USE AdventureWorks
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), Document varbinary(max))
GO
INSERT INTO myTable(FileName, FileType, Document)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
* FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
GO
E. 将 OPENROWSET BULK 访问接口用于格式化文件以检索文本文件中的行
以下示例使用格式化文件检索用制表符分隔的文本文件 values.txt 中的行,该文件包含下列数据:
复制代码
1 Data Item 1
2 Data Item 2
3 Data Item 3
格式化文件 values.fmt 说明 values.txt 中的列:
复制代码
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
下面的语句是检索此数据的查询:
复制代码
SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',
FORMATFILE = 'c:\test\values.fmt') AS a;
C. 向SQL Server中导入数据时总是在最后一步出现错误,查看报告里是下面的内容,这是什么情况怎么解决啊
你的源文件excel中有错误。
错误在于price2这个列名是两列的合并列名。
请将他们分开命名再导入。
D. 将txt文件导入SQL中提示错误
你把你的txt贴一部分出来,并把你的table结构发出来看看 。顺便看看TXT里有没有什么乱码
E. 解释SQL语句功能 越详细越好
就是创建一个新的数据库,自己看看帮助很简单的!
语法
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ]
参数
database_name
新数据库的名称。数据库名称在服务器中必须唯一,并且符合标识符的规则。database_name 最多可以包含 128 个字符,除非没有为日志指定逻辑名。如果没有指定日志文件的逻辑名,则 Microsoft® SQL Server™ 会通过向 database_name 追加后缀来生成逻辑名。该操作要求 database_name 在 123 个字符之内,以便生成的日志文件逻辑名少于 128 个字符。
ON
指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。当后跟以逗号分隔的用以定义主文件组的数据文件的 <filespec> 项列表时,该关键字是必需的。主文件组的文件列表后可跟以逗号分隔的 <filegroup> 项列表(可选),<filegroup> 项用以定义用户文件组及其文件。
n
占位符,表示可以为新数据库指定多个文件。
LOG ON
指定显式定义用来存储数据库日志的磁盘文件(日志文件)。该关键字后跟以逗号分隔的用以定义日志文件的 <filespec> 项列表。如果没有指定 LOG ON,则会自动创建一个日志文件,其名称由系统生成,大小为下列两个值中的较大者:0.5 MB 和数据库中所有数据文件大小总和的 25%。
FOR LOAD
支持该子句是为了与早期版本的 Microsoft SQL Server 兼容。数据库在打开 dbo use only 数据库选项的情况下创建,并且将其状态设置为正在装载。SQL Server 7.0 版中不需要该子句,因为 RESTORE 语句可以作为还原操作的一部分重新创建数据库。
FOR ATTACH
指定从现有的一组操作系统文件中附加数据库。必须有指定第一个主文件的 <filespec> 条目。至于其它 <filespec> 条目,只需要与第一次创建数据库或上一次附加数据库时路径不同的文件的那些条目。必须为这些文件指定 <filespec> 条目。附加的数据库必须使用与 SQL Server 相同的代码页和排序次序创建。应使用 sp_attach_db 系统存储过程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必须指定 16 个以上的 <filespec> 项目时,才需要使用 CREATE DATABASE FOR ATTACH。
如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication 从数据库删除复制。
collation_name
指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则指派为数据库的排序规则。
有关 Windows 和 SQL 排序规则名称的更多信息,请参见 COLLATE。
PRIMARY
指定关联的 <filespec> 列表定义主文件。主文件组包含所有数据库系统表。还包含所有未指派给用户文件组的对象。主文件组的第一个 <filespec> 条目成为主文件,该文件包含数据库的逻辑起点及其系统表。一个数据库只能有一个主文件。如果没有指定 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。
NAME
为由 <filespec> 定义的文件指定逻辑名称。如果指定了 FOR ATTACH,则不需要指定 NAME 参数。
logical_file_name
用来在创建数据库后执行的 Transact-SQL 语句中引用文件的名称。logical_file_name 在数据库中必须唯一,并且符合标识符的规则。该名称可以是字符或 Unicode 常量,也可以是常规标识符或定界标识符。
FILENAME
为 <filespec> 定义的文件指定操作系统文件名。
'os_file_name'
操作系统创建 <filespec> 定义的物理文件时使用的路径名和文件名。os_file_name 中的路径必须指定 SQL Server 实例上的目录。os_file_name 不能指定压缩文件系统中的目录。
如果文件在原始分区上创建,则 os_file_name 必须只指定现有原始分区的驱动器字母。每个原始分区上只能创建一个文件。原始分区上的文件不会自动增长;因此,os_file_name 指定原始分区时,不需要指定 MAXSIZE 和 FILEGROWTH 参数。
SIZE
指定 <filespec> 中定义的文件的大小。如果主文件的 <filespec> 中没有提供 SIZE 参数,那么 SQL Server 将使用 model 数据库中的主文件大小。如果次要文件或日志文件的 <filespec> 中没有指定 SIZE 参数,则 SQL Server 将使文件大小为 1 MB。
size
<filespec> 中定义的文件的初始大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。size 的最小值为 512 KB。如果没有指定 size,则默认值为 1 MB。为主文件指定的大小至少应与 model 数据库的主文件大小相同。
MAXSIZE
指定 <filespec> 中定义的文件可以增长到的最大大小。
max_size
<filespec> 中定义的文件可以增长到的最大大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。如果没有指定 max_size,那么文件将增长到磁盘变满为止。
说明 在磁盘即将变满时,Microsoft Windows NT® S/B 系统日志会警告 SQL Server 系统管理员。
UNLIMITED
指定 <filespec> 中定义的文件将增长到磁盘变满为止。
FILEGROWTH
指定 <filespec> 中定义的文件的增长增量。文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。
growth_increment
每次需要新的空间时为文件添加的空间大小。指定一个整数,不要包含小数位。0 值表示不增长。该值可以 MB、KB、GB、TB 或百分比 (%) 为单位指定。如果未在数量后面指定 MB、KB 或 %,则默认值为 MB。如果指定 %,则增量大小为发生增长时文件大小的指定百分比。如果没有指定 FILEGROWTH,则默认值为 10%,最小值为 64 KB。指定的大小舍入为最接近的 64 KB 的倍数。
注释
使用一条 CREATE DATABASE 语句即可创建数据库以及存储该数据库的文件。SQL Server 分两步实现 CREATE DATABASE 语句:
SQL Server 使用 model 数据库的复本初始化数据库及其元数据。
然后,SQL Server 使用空页填充数据库的剩余部分,除了包含记录数据库中空间使用情况以外的内部数据页。
因此,model 数据库中任何用户定义对象均复制到所有新创建的数据库中。可以向 model 数据库中添加任何对象,例如表、视图、存储过程、数据类型等,以将这些对象添加到所有数据库中。
每个新数据库都从 model 数据库继承数据库选项设置(除非指定了 FOR ATTACH)。例如,在 model 和任何创建的新数据库中,数据库选项 select into/bulk 都设置为 OFF。如果使用 ALTER DATABASE 更改 model 数据库的选项,则这些选项设置会在创建的新数据库中生效。如果在 CREATE DATABASE 语句中指定了 FOR ATTACH,则新数据库将继承原始数据库的数据库选项设置。
一台服务器上最多可以指定 32,767 个数据库。
有三种类型的文件用来存储数据库:
主文件包含数据库的启动信息。主文件还可以用来存储数据。每个数据库都包含一个主文件。
次要文件保存所有主要数据文件中容纳不下的数据。如果主文件大到足以容纳数据库中的所有数据,就不需要有次要数据文件。而另一些数据库可能非常大,需要多个次要数据文件,也可能使用多个独立磁盘驱动器上的次要文件,以将数据分布在多个磁盘上。
事务日志文件保存用来恢复数据库的日志信息。每个数据库必须至少有一个事务日志文件(尽管可以有多个)。事务日志文件最小为 512 KB。
每个数据库至少有两个文件,一个主文件和一个事务日志文件。
尽管 'os_file_name' 可以是任何有效的操作系统文件名,但如果使用以下建议的扩展名,则可以更加清楚地反映文件的用途。
文件类型 文件扩展名
主要数据文件 .mdf
次要数据文件 .ndf
事务日志文件 .ldf
F. 如何在sql中设置多个查询语句窗口同时执行
同一个SQL可以写多个查询语句,多个查询语句的结果是一起出来的。如:
SELECT col1,col2 FROM a_table WHERE ...
UNION
SELECT col1,col2 FROM b_table WHERE ...
G. sql 数据库执行次序的问题
CREATE DATABASE
创建一个新数据库及存储该数据库的文件,或从先前创建的数据库的文件中附加数据库。
说明 有关与 DISK INIT 向后兼容性的更多信息,请参见"Microsoft® SQL Server™ 向后兼容性详细信息"中的设备(级别 3)。
语法
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ]
参数
database_name
新数据库的名称。数据库名称在服务器中必须唯一,并且符合标识符的规则。database_name 最多可以包含 128 个字符,除非没有为日志指定逻辑名。如果没有指定日志文件的逻辑名,则 Microsoft® SQL Server™ 会通过向 database_name 追加后缀来生成逻辑名。该操作要求 database_name 在 123 个字符之内,以便生成的日志文件逻辑名少于 128 个字符。
ON
指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。该关键字后跟以逗号分隔的 <filespec> 项列表,<filespec> 项用以定义主文件组的数据文件。主文件组的文件列表后可跟以逗号分隔的 <filegroup> 项列表(可选),<filegroup> 项用以定义用户文件组及其文件。
n
占位符,表示可以为新数据库指定多个文件。
LOG ON
指定显式定义用来存储数据库日志的磁盘文件(日志文件)。该关键字后跟以逗号分隔的 <filespec> 项列表,<filespec> 项用以定义日志文件。如果没有指定 LOG ON,将自动创建一个日志文件,该文件使用系统生成的名称,大小为数据库中所有数据文件总大小的 25%。
FOR LOAD
支持该子句是为了与早期版本的 Microsoft SQL Server 兼容。数据库在打开 dbo use only 数据库选项的情况下创建,并且将其状态设置为正在装载。SQL Server 7.0 版中不需要该子句,因为 RESTORE 语句可以作为还原操作的一部分重新创建数据库。
FOR ATTACH
指定从现有的一组操作系统文件中附加数据库。必须有指定第一个主文件的 <filespec> 条目。至于其它 <filespec> 条目,只需要与第一次创建数据库或上一次附加数据库时路径不同的文件的那些条目。必须为这些文件指定 <filespec> 条目。附加的数据库必须使用与 SQL Server 相同的代码页和排序次序创建。应使用 sp_attach_db 系统存储过程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必须指定 16 个以上的 <filespec> 项目时,才需要使用 CREATE DATABASE FOR ATTACH。
如果将数据库附加到的服务器不是该数据库从中分离的服务器,并且启用了分离的数据库以进行复制,则应该运行 sp_removedbreplication 从数据库删除复制。
collation_name
指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则指派为数据库的排序规则。
有关 Windows 和 SQL 排序规则名称的更多信息,请参见 COLLATE。
PRIMARY
指定关联的 <filespec> 列表定义主文件。主文件组包含所有数据库系统表。还包含所有未指派给用户文件组的对象。主文件组的第一个 <filespec> 条目成为主文件,该文件包含数据库的逻辑起点及其系统表。一个数据库只能有一个主文件。如果没有指定 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。
NAME
为由 <filespec> 定义的文件指定逻辑名称。如果指定了 FOR ATTACH,则不需要指定 NAME 参数。
logical_file_name
用来在创建数据库后执行的 Transact-SQL 语句中引用文件的名称。logical_file_name 在数据库中必须唯一,并且符合标识符的规则。该名称可以是字符或 Unicode 常量,也可以是常规标识符或定界标识符。
FILENAME
为 <filespec> 定义的文件指定操作系统文件名。
'os_file_name'
操作系统创建 <filespec> 定义的物理文件时使用的路径名和文件名。os_file_name 中的路径必须指定 SQL Server 实例上的目录。os_file_name 不能指定压缩文件系统中的目录。
如果文件在原始分区上创建,则 os_file_name 必须只指定现有原始分区的驱动器字母。每个原始分区上只能创建一个文件。原始分区上的文件不会自动增长;因此,os_file_name 指定原始分区时,不需要指定 MAXSIZE 和 FILEGROWTH 参数。
SIZE
指定 <filespec> 中定义的文件的大小。如果主文件的 <filespec> 中没有提供 SIZE 参数,那么 SQL Server 将使用 model 数据库中的主文件大小。如果次要文件或日志文件的 <filespec> 中没有指定 SIZE 参数,则 SQL Server 将使文件大小为 1 MB。
size
<filespec> 中定义的文件的初始大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。size 的最小值为 512 KB。如果没有指定 size,则默认值为 1 MB。为主文件指定的大小至少应与 model 数据库的主文件大小相同。
MAXSIZE
指定 <filespec> 中定义的文件可以增长到的最大大小。
max_size
<filespec> 中定义的文件可以增长到的最大大小。可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。指定一个整数,不要包含小数位。如果没有指定 max_size,那么文件将增长到磁盘变满为止。
说明 在磁盘即将变满时,Microsoft Windows NT® S/B 系统日志会警告 SQL Server 系统管理员。
UNLIMITED
指定 <filespec> 中定义的文件将增长到磁盘变满为止。
FILEGROWTH
指定 <filespec> 中定义的文件的增长增量。文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。
growth_increment
每次需要新的空间时为文件添加的空间大小。指定一个整数,不要包含小数位。0 值表示不增长。该值可以 MB、KB、GB、TB 或百分比 (%) 为单位指定。如果未在数量后面指定 MB、KB 或 %,则默认值为 MB。如果指定 %,则增量大小为发生增长时文件大小的指定百分比。如果没有指定 FILEGROWTH,则默认值为 10%,最小值为 64 KB。指定的大小舍入为最接近的 64 KB 的倍数。
参考资料:SQL联机丛书
H. 繁体SQL 数据库 简体SQL SERVER 2000
解决的办法是指名排序方式,告诉查询分析器应该怎样排序即可。这里会需要用到一个关键字 COLLATE
Coliate 在SQLServer联机丛书中是这样解释的
COLLATE
一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。
语法
COLLATE < collation_name >
< collation_name > ::=
{ Windows_collation_name } | { SQL_collation_name }
参数
collation_name
是应用于表达式、列定义或数据库定义的排序规则的名称。collation_name 可以只是指定的 Windows_collation_name 或 SQL_collation_name。
Windows_collation_name
是 Windows 排序规则的排序规则名称。请参见 Windows 排序规则名称。
SQL_collation_name
是 SQL 排序规则的排序规则名称。请参见 SQL 排序规则名称。
那么我们怎么可以知道当前的排序规则名称是什么呢,其实这个排序规则名称是我们在创建数据库(实例)的时候就可以进行选择的,不过通常情况下我们都会默认原来的设定,不会对其进行变更,所以如果是简体中文的SQLServer就会默认的使用简体中文的排序规则,而如果是繁体中文的SQLServer 就会默认的使用繁体中文的排序规则。我们在察看数据库(实例)的属性时,常规页签的最下面一行就是当前的排序规则。在默认的情况下,简体中文的排序规则名称是:Chinese_PRC_CI_AS,而繁体中文的排序规则名称则是:Chinese_Taiwan_Stroke_CI_AS,所以我们如果在有简体繁体排序规则名称混用的时候,只要声明一下你当前要使用哪种排序规则进行比较就可以了,例如针对上面的那个SQL语句,下面两种方法都可以解决那个错误提示的问题
SELECT Table1.*,Table2.*
FROM Table1
INNER JOIN Table2 ON Table2.FK = Table1.PK COLLATE Chinese_PRC_CI_AS
SELECT Table1.*,Table2.*
FROM Table1
INNER JOIN Table2 ON Table2.FK = Table1.PK COLLATE Chinese_Taiwan_Stroke_CI_AS
说了半天如何解决排序规则冲突引起的问题,如果还有兴趣的话,下面把SQL Server联机丛书里面关于排序规则的概念贴出来给大家分享一下,省得大家再去找:
Microsoft® SQL Server™ 2000 支持多种排序规则。排序规则对控制正确使用语言(如马其顿语或波兰语)或字母表(如西欧语言使用的拉丁字母表 Latin1_General)字符的规则进行编码。
每个 SQL Server 排序规则指定三个属性:
用于 Unicode 数据类型(nchar、nvarchar 和 ntext)的排序次序。排序次序定义字符的排序序列,以及在比较操作中对字符取值的方法。
用于非 Unicode 字符数据类型(char、varchar 和 text)的排序次序。
用于存储非 Unicode 字符数据的代码页。
说明 不能指定与 Unicode 数据类型(nchar、nvarchar 和 ntext)对应的代码页。用于 Unicode 字符的双字节位模式由 Unicode 标准定义且不能更改。
可在任何级别上指定 SQL Server 2000 排序规则。安装 SQL Server 2000 实例时,可指定该实例的默认排序规则。每次创建数据库时,可指定用于该数据库的默认排序规则。如果未指定排序规则,数据库的默认排序规则即是实例的默认排序规则。无论何时定义字符列、变量或参数,都可指定这些对象的排序规则。如果未指定排序规则,将使用数据库的默认排序规则创建这些对象。
如果 SQL Server 实例的所有用户都使用同一种语言,则应选择支持该语言的排序规则。例如,若所有用户都讲法语,则选择法语排序规则。
如果 SQL Server 实例的用户使用多种语言,则应选择能对多语种需求提供最佳支持的排序规则。例如,如果用户一般都讲西欧语言,则选择 Latin1_General 排序规则。当支持使用多种语言的用户时,对所有字符数据都使用 Unicode 数据类型 nchar、nvarchar 和 ntext 最为重要。Unicode 旨在消除非 Unicode char、varchar 和 text 数据类型的代码页转换困难。因为排序规则定义用于比较操作的排序次序和 Unicode 字符的排序,所以当用 Unicode 数据类型实现所有的列时,排序规则仍会产生不同。即使当使用 Unicode 数据类型存储字符数据时,也应选择支持大多数用户的排序规则,以防使用非 Unicode 数据类型实现列或变量。
SQL Server 排序规则定义数据库引擎存储和操作字符及 Unicode 数据的方式。然而,当数据移入应用程序后,在应用程序中进行的字符排序和比较将由计算机上选定的 Windows 区域设置控制。应用程序使用的字符数据排序规则是由 Windows 区域设置控制的项目之一,区域设置还定义其它项目,如数字、时间、日期和货币格式。对于 Microsoft Windows NT® 4.0、Microsoft Windows® 98 和 Microsoft Windows 95,可使用控制面板中的"区域设置"应用程序指定 Windows 区域设置。对于 Microsoft Windows 2000,可使用"控制面板"中的"区域选项"应用程序指定区域设置。有关 Windows 区域设置的更多信息,请参见 Microsoft Web 站点 MSDN® 页中的 Developing International Software for Windows 95 and Windows NT 4.0。
多个排序规则可对非 Unicode 数据使用相同的代码页。例如,代码页 1251 定义西里尔语字符集。多个排序规则(如 Cyrillic_General、Ukrainian 和 Macedonian)都使用该代码页。虽然这些排序规则都使用相同的位集来表示非 Unicode 字符数据,但在处理字典定义时所应用的排序和比较规则略有不同,而字典定义确定语言或字母表中与排序规则相关的正确字符序列。
因为 SQL Server 2000 排序规则控制 Unicode 和非 Unicode 排序次序,所以不会遇到由为 Unicode 和非 Unicode 数据指定不同的排序规则而引起的问题。在 SQL Server 的早期版本中,对代码页号、字符排序次序和 Unicode 排序规则分别进行指定。SQL Server 的早期版本还支持每个代码页有不同数目的排序次序,并为某些代码页提供 Windows 区域设置中没有的排序次序。在 SQL Server 7.0 中,还可以指定为非 Unicode 数据选择的排序次序以外的其它 Unicode 排序次序。这会导致在使用与非 Unicode 数据相对的 Unicode 数据时,排序和比较操作返回不同的结果。
I. SQL的问题
排序规则根据特定语言和区域设置的标准指定对字符串数据进行排序和比较的规则。以 ORDER BY 子句为例:如果按升序排列,说英语的人认为字符串 Chiapas 应排在 Colima 之前。但是,对于在墨西哥说西班牙语的人来说,他们会认为以 Ch 开头的单词应显示在以 C 开头的单词列表的末尾。排序规则规定了这些排序和比较规则。Latin_1 General 排序规则在 ORDER BY ASC 子句中将 Chiapas 排在 Colima 之前,而 Traditional_Spanish 排序规则将 Chiapas 排在 Colima 之后。
为非 Unicode 字符数据(例如 char、varchar 和 text 数据)指定排序规则后,某个特定的代码页将与此排序规则相关联。例如,如果用 Latin1_General 排序规则定义表中的 char 列,则 SQL Server 将使用 1252 代码页的码位解释和显示该列中的数据。有关代码页和排序规则的详细信息,请参阅排序规则和代码页体系结构。
为 Unicode 数据(例如 nchar、nvarchar 和 ntext)指定的排序规则没有与特定的代码页相关联,因为 Unicode 数据几乎可以处理世界上所有语言的所有字符。
字符集是由一对方括号“[]”括起来的字符集合。使用字符集,你可以告诉正则表达式引擎仅仅匹配多个字符中的一个。如果你想匹配一个“a”或一个 “e”,使用<<[ae]>>。你可以使用<<gr[ae]y>>匹配gray或grey。这在你不确定你要搜索的字符是采用美国英语还是英国英语时特别有用。相反,<<gr[ae]y>>将不会匹配graay或graey。字符集中的字符顺序并没有什么关系,结果都是相同的。
你可以使用连字符“-”定义一个字符范围作为字符集。<<[0-9]>>匹配0到9之间的单个数字。你可以使用不止一个范围。<<[0-9a-fA-F] >>匹配单个的十六进制数字,并且大小写不敏感。你也可以结合范围定义与单个字符定义。<<[0-9a-fxA-FX]> >匹配一个十六进制数字或字母X。
J. SQL读取txt内容
http://www.dedecms.com/knowledge/data-base/sql-server/2012/0821/11295.html
你看看这个,希望对你有帮助。