sql server 2005

本文档提供了一套关于SQL Server的教程,涵盖了数据库创建、表操作、数据读写及存储过程等内容,帮助读者掌握基本的SQL Server管理和编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建数据库

  1. 在查询编辑器窗口中,键入以下代码,但不要执行它:

    CREATE DATABASE TestData
    GO
  2. 使用指针选择词语 CREATE DATABASE ,再按 F1 。SQL Server 2005 联机丛书中的 CREATE DATABASE 主题应该打开。您可以使用此方法查找 CREATE DATABASE 以及在本教程中使用的其他语句的完整语法。

  3. 在查询编辑器中,按 F5 以执行语句并创建名为 TestData 的数据库。

在您创建数据库时,SQL Server 制作 model 数据库的副本,并将该副本重命名为数据库名称。除非您将初始大小很大的数据库指定为可选参数,否则此操作应该只需要几秒钟。

ms365340.note(zh-cn,SQL.90).gif 注意:
在单个批处理中提交多条语句时,可以用关键字 GO 分隔各语句。当批处理只包含一条语句时,GO 是可选的。

 

切换到数据库

  1. 在查询编辑器窗口中,键入以下代码,并执行它以更改与 TestData 数据库的连接。

    USE TestData
    GO

 

创建表:

  1. 在查询编辑器窗口中,键入以下代码,并执行它以创建一个名为 Products 的简单表。该表中各列的名称为 ProductIDProductNamePriceProductDescriptionProductID 列是表的主键。intvarchar(25)moneytext 都是数据类型。当插入或更改行时,只有 PriceProductionDescription 列可以不包含数据。此语句包含称为架构的可选元素 (dbo. )。架构是拥有表的数据库对象。如果您是管理员,则 dbo 是默认架构。dbo 代表数据库所有者。

    CREATE TABLE dbo.Products
       (ProductID int PRIMARY KEY NOT NULL,
        ProductName varchar(25) NOT NULL,
        Price money NULL,
        ProductDescription text NULL)
    GO

 

 

SQL Server 2005 联机丛书(2008 年 11 月)
插入和更新表中的数据(教程)

新建日期: 2006 年 4 月 14 日

您已经创建 Products 表,可以通过使用 INSERT 语句向该表中插入数据了。插入数据后,将通过使用 UPDATE 语句更改行的内容。您将使用 UPDATE 语句的 WHERE 子句,以限制对单个行的更新。这四条语句将输入以下数据。

ProductID ProductName Price ProductDescription

1

Clamp

12.48

Workbench clamp

50

Screwdriver

3.17

Flat head

75

Tire Bar

 


Tool for changing tires.

3000

3mm Bracket

.52

 


基本语法如下:INSERT、表名、列的列表、VALUES,然后是要插入的值的列表。如果某行的前面有两个连字符,则指示该行为注释,编译器将忽略其文本。在这种情况下,注释说明允许的语法变体。

  1. 执行以下语句,将一行插入到在上一个任务中创建的 Products 表中。基本语法如下:

    -- Standard syntax
    INSERT dbo.Products (ProductID, ProductName, Price, ProductDescription)
        VALUES (1, 'Clamp', 12.48, 'Workbench clamp')
    GO
  2. 以下语句显示如何通过在字段列表(在圆括号中)中和值列表中均切换 ProductIDProductName 的位置,更改提供参数的顺序。

    -- Changing the order of the columns
    INSERT dbo.Products (ProductName, ProductID, Price, ProductDescription)
        VALUES ('Screwdriver', 50, 3.17, 'Flat head')
    GO
  3. 以下语句演示,只要值是按正确顺序列出的,列的名称就是可选的。此语法很常见,但是建议不要使用它,因为其他人了解您的代码可能会更困难。为 Price 列指定了 NULL ,因为还不知道此产品的价格。

    -- Skipping the column list, but keeping the values in order
    INSERT dbo.Products
        VALUES (75, 'Tire Bar', NULL, 'Tool for changing tires.')
    GO
  4. 只要在默认架构中访问和更改表,架构名称就是可选的。由于 ProductDescription 列允许空值,而且没有提供值,因此可以从语句中完全删除 ProductDescription 列的名称和值。

    -- Dropping the optional dbo and dropping the ProductDescription column
    INSERT Products (ProductID, ProductName, Price)
        VALUES (3000, '3mm Bracket', .52)
    GO

 

更新product表

  1. 键入并执行以下 UPDATE 语句,将第二种产品的 ProductNameScrewdriver 更改为 Flat Head Screwdriver

    UPDATE dbo.Products
        SET ProductName = 'Flat Head Screwdriver'
        WHERE ProductID = 50
    GO


读取表中的数据(教程)

新建日期: 2006 年 4 月 14 日

使用 SELECT 语句可以读取表中的数据。SELECT 语句是最重要的 Transact-SQL 语句之一,其语法有许多变体。在本教程中,您将使用五个简单版本。

  1. 键入并执行以下语句以读取 Products 表中的数据。

    -- The basic syntax for reading data from a single table
    SELECT ProductID, ProductName, Price, ProductDescription
        FROM dbo.Products
    GO
  2. 您可以使用星号选择表中的所有列。这通常用于即席查询中。您应该在永久代码中提供列的列表,以便语句将返回预测列,即使稍后将新列添加到表中也是如此。

    -- Returns all columns in the table
    -- Does not use the optional schema, dbo
    SELECT * FROM Products
    GO
  3. 可以省略不希望返回的列。列将按列出它们的顺序返回。

    -- Returns only two of the columns from the table
    SELECT ProductName, Price
        FROM dbo.Products
    GO
  4. 使用 WHERE 子句可以限制返回给用户的行。

    -- Returns only two of the records in the table
    SELECT ProductID, ProductName, Price, ProductDescription
        FROM dbo.Products
        WHERE ProductID < 60
    GO
  5. 您可以在返回列中的值时使用它们。以下示例对 Price 列执行数学运算。除非通过使用 AS 关键字提供一个名称,否则以此方式更改的列将没有名称。

    -- Returns ProductName and the Price including a 7% tax
    -- Provides the name CustomerPays for the calculated column
    SELECT ProductName, Price * 1.07 AS CustomerPays
        FROM dbo.Products
    GO

 

 

创建视图和存储过程

新建日期: 2006 年 4 月 14 日

既然 Mary 可以访问 TestData 数据库,您可能希望创建一些数据库对象(如视图和存储过程),再将它们的访问权限授予 Mary。视图是存储的 SELECT 语句,而存储过程是以批处理方式执行的一条或多条 Transact-SQL 语句。

视图像表那样进行查询,但不接受参数。存储过程比视图更复杂。存储过程可以同时具有输入参数和输出参数,并可以包括控制代码流的语句,如 IF 和 WHILE 语句。将存储过程用于数据库中的所有重复操作,是一个良好的编程做法。

在此示例中,您将使用 CREATE VIEW 创建一个视图,该视图仅选择 Products 表中的两列。然后,您将使用 CREATE PROCEDURE 创建一个存储过程,该存储过程接受价格参数,并仅返回价格小于指定参数值的那些产品。

  1. 执行以下语句创建一个非常简单的视图,该视图执行 Select 语句,并将产品的名称和价格返回给用户。

    CREATE VIEW vw_Names
       AS
       SELECT ProductName, Price FROM Products;
    GO
  1. 视图的处理方式与表类似。使用 SELECT 语句访问视图。

    SELECT * FROM vw_Names;
    GO
  1. 以下语句创建一个名为 pr_Names 的存储过程,接受名为 @VarPrice 、数据类型为 money 的输入参数。该存储过程打印与输入参数(已从 money 数据类型更改为 varchar(10) 字符数据类型)串联的语句 Products less than 。然后,该存储过程对视图执行 SELECT 语句,将输入参数作为 WHERE 子句的一部分进行传递。这将返回价格小于输入参数值的所有产品。

    CREATE PROCEDURE pr_Names @VarPrice money
       AS
       BEGIN
          -- The print statement returns text to the user
          PRINT 'Products less than ' + CAST(@VarPrice AS varchar(10));
          -- A second statement starts here
          SELECT ProductName, Price FROM vw_Names
                WHERE Price < @varPrice;
       END
    GO
  1. 若要测试存储过程,请键入并执行以下语句。存储过程应该返回在第 1 课中向 Products 表中输入的、其价格小于 10.00 的两个产品的名称。

    EXECUTE pr_Names 10.00;
    GO

 

 

 

 

删除数据库对象

新建日期: 2006 年 4 月 14 日

若要删除在本教程中创建的所有对象,您只需删除数据库即可。但是,在本主题中,您将完成下列步骤执行与教程中每项操作相反的操作。

  1. 在删除对象之前,请确保使用正确的数据库:

    USE TestData;
    GO
  2. 使用 REVOKE 语句删除 Mary 对存储过程的执行权限:

    REVOKE EXECUTE ON pr_Names FROM Mary;
    GO
  3. 使用 DROP 语句删除 MaryTestData 数据库的访问权限:

    DROP USER Mary;
    GO
  4. 使用 DROP 语句删除 Mary 对此 SQL Server 2005 实例的访问权限。

    DROP LOGIN [<computer_name>/Mary];
    GO
  5. 使用 DROP 语句删除存储过程 pr_Names

    DROP PROC pr_Names;
    GO
  6. 使用 DROP 语句删除视图 vw_Names

    DROP View vw_Names;
    GO
  7. 使用 DELETE 语句删除 Products 表中的所有行:

    DELETE FROM Products;
    GO
  8. 使用 DROP 语句删除 Products 表:

    DROP Table Products;
    GO
  9. 正使用 TestData 数据库时,无法删除该数据库;因此,请首先将上下文切换到其他数据库,再使用 DROP 语句删除 TestData 数据库:

    USE MASTER;
    GO
    DROP DATABASE TestData;
    GO

“编写 Transact-SQL 语句”教程到此结束。请记住,本教程只是简要概述,它并未介绍所用语句的所有选项。设计和创建有效的数据库结构以及配置对数据的安全访问,需要比本教程中的示例更复杂的数据库。

 

 

 

 

实例

在下面的实例中,我们首先尝试与主服务器建立连接。如果连接失败并引发异常,则尝试连接镜像服务器(可能已升级为新的主服务器)。请注意连接字符串中 failoverPartner 属性的用法。

import java.sql.*;

public class clientFailover {

public static void main(String[] args) {

// Create a variable for the connection string.
String connectionUrl = "jdbc:sqlserver://serverA:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;" +
"failoverPartner=serverB";

// Declare the JDBC objects.
Connection con = null;
Statement stmt = null;

try {
// Establish the connection to the principal server.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
System.out.println("Connected to the principal server.");

// Note that if a failover of serverA occurs here, then an
// exception will be thrown and the failover partner will
// be used in the first catch block below.

// Create and execute an SQL statement that inserts some data.
stmt = con.createStatement();

// Note that the following statement assumes that the
// TestTable table has been created in the AdventureWorks
// sample database.
stmt.executeUpdate("INSERT INTO TestTable (Col2, Col3) VALUES ('a', 10)");
}

// Handle any errors that may have occurred.
catch (SQLException se) {
try {
// The connection to the principal server failed,
// try the mirror server which may now be the new
// principal server.
System.out.println("Connection to principal server failed, " +
"trying the mirror server.");
con = DriverManager.getConnection(connectionUrl);
System.out.println("Connected to the new principal server.");
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO TestTable (Col2, Col3) VALUES ('a', 10)");
}
catch (Exception e) {
e.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace();
}
// Close the JDBC objects.
finally {
if (stmt != null) try { stmt.close(); } catch(Exception e) {}
if (con != null) try { con.close(); } catch(Exception e) {}
}
}
}
其他资源

通过 JDBC 驱动程序连接到 SQL Server

 

 

Functions (Transact-SQL)

SQL Server 2005 提供了许多内置函数,同时也允许您创建用户定义函数。本页中列出了这些内置函数的类别。有关用户定义函数的详细信息,请参阅 用户定义函数(数据库引擎)

函数 说明

行集函数

返回可在 SQL 语句中像表引用一样使用的对象。

聚合函数

对一组值进行运算,但返回一个汇总值。

排名函数

对分区中的每一行均返回一个排名值。

标量函数

对单一值进行运算,然后返回单一值。只要表达式有效,即可使用标量函数。

函数类别 说明

配置函数

返回当前配置信息。

游标函数

返回游标信息。

日期和时间函数

对日期和时间输入值执行运算,然后返回字符串、数字或日期和时间值。

数学函数

基于作为函数的参数提供的输入值执行运算,然后返回数字值。

元数据函数

返回有关数据库和数据库对象的信息。

安全函数

返回有关用户和角色的信息。

字符串函数

对字符串(charvarchar )输入值执行运算,然后返回一个字符串或数字值。

系统函数

执行运算后返回 SQL Server 实例中有关值、对象和设置的信息。

系统统计函数

返回系统的统计信息。

文本和图像函数

对文本或图像输入值或列执行运算,然后返回有关值的信息。

SQL Server 内置函数可以是确定的或是不确定的。如果任何时候用一组特定的输入值调用内置函数,返回的结果总是相同的,则这些内置函数为确定的。如果每次调用内置函数 时,即使用的是同一组特定输入值,也总返回不同结果,则这些内置函数为不确定的。有关详细信息,请参阅 确定性函数和不确定性函数

使用字符串输入并返回字符串输出的函数,对输出使用输入字符串的排序规则。

使用非字符输入并返回字符串的函数,对输出使用当前数据库的默认排序规则。

使用多个字符串输入并返回字符串的函数,使用排序规则的优先顺序规则设置输出字符串的排序规则。有关详细信息,请参阅 排序规则优先级 (Transact-SQL)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值