SQL SERVER --STUDY(8)

xiaoxiao2024-03-26  25

运行   sqlcmd   的时候报如下的错:         HResult   0x2,   Level   16,   State   1     Named   Pipes   Privider:   Could   not   open   a   connection   to   SQL   Server   [2].     Sqlcmd:   Error:   Microsoft   SQL   Native   Client   :   An   error   has   occurred   while   establishing   a   connection   to   the   server.   When   connecting   to   SQL   Server   2005,   this   failure   may   be   caused   by   the   fact   that   under   the   default   setting   SQL   Server   does   not   allow   remote   connections..     Sqlcmd:   Error:   Microsoft   SQL   Native   Client   :   Login   timeout   expired.

 

我 的 解决方法 :                sqlcmd   -S   .\SQL2005      由于SQL2005   不是默认数据库,所以必须指定实例名。

————————————————————————————————————

链接 :http://msdn.microsoft.com/zh-cn/library/ms170572.aspx

使用 sqlcmd 运行 Transact-SQL 脚本文件

您可以使用 sqlcmd 运行 Transact-SQL 脚本文件。Transact-SQL 脚本文件是一个文本文件,它可以包含 Transact-SQL 语句、sqlcmd 命令以及脚本变量的组合。

若要使用记事本创建一个简单的 Transact-SQL 脚本文件,请执行下列操作:

单击“开始”,依次指向“所有程序”、“附件”,再单击“记事本”。复制以下 Transact-SQL 代码并将其粘贴到记事本:   USE AdventureWorks; GO SELECT c.FirstName + ' ' + c.LastName AS 'Employee Name', a.AddressLine1, a.AddressLine2 , a.City, a.PostalCode FROM Person.Contact AS c INNER JOIN HumanResources.Employee AS e ON c.ContactID = e.ContactID INNER JOIN HumanResources.EmployeeAddress ea ON ea.EmployeeID = e.EmployeeID INNER JOIN Person.Address AS a ON a.AddressID = ea.AddressID; GO  在 C 驱动器中将文件保存为 myScript.sql。  运行脚本文件

打开命令提示符窗口。

在命令提示符窗口中,键入 sqlcmd -S myServer\instanceName -i C:\myScript.sql

按 Enter 键。

Adventure Works 员工的姓名和地址列表便会输出到命令提示符窗口。

 将此输出保存到文本文件中

打开命令提示符窗口。

在命令提示符窗口中,键入 sqlcmd -S myServer\instanceName -i C:\myScript.sql -o C:\EmpAdds.txt

按 Enter 键。

命令提示符窗口中不会返回任何输出,而是将输出发送到 EmpAdds.txt 文件。您可以打开 EmpAdds.txt 文件来查看此输出操作。

 

inner join on, left join on, right join on讲解 (转载) : http://www.cnblogs.com/ajaxworld/archive/2007/07/06/808854.html

1.理论

只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。

个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为牵引合并起来。

语法

FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2

 

 

INNER JOIN 操作包含以下部分:

 

 

部分说明table1, table2要组合其中的记录的表的名称。field1,field2要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。compopr任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。      

 

说明

可以在任何 FROM 子句中使用 INNER JOIN 操作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,Inner 联接就会组合这些表中的记录。

 

如果试图联接包含备注或 OLE 对象数据的字段,将发生错误。(?)

 

可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。

 

下例展示了如何通过 CategoryID 字段联接 Categories 和 Products 表:

SELECT CategoryName, ProductName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID;

 

 在前面的示例中,CategoryID 是被联接字段,但是它不包含在查询输出中,因为它不包含在 SELECT 语句中。若要包含被联接字段,请在 SELECT 语句中包含该字段名,在本例中是指 Categories.CategoryID。

 

也可以在 JOIN 语句中链接多个 ON 子句,请使用如下语法:

SELECT fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field1 AND ON table1.field2 compopr table2.field2) OR ON table1.field3 compopr table2.field3)];

 也可以通过如下语法嵌套 JOIN 语句:

 

SELECT fieldsFROM table1 INNER JOIN(table2 INNER JOIN [( ]table3[INNER JOIN [( ]tablex [INNER JOIN ...)] ON table3.field3 compopr tablex.fieldx)]ON table2.field2 compopr table3.field3) ON table1.field1 compopr table2.field2;

 

LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。

 

2.操作实例

表A记录如下:aID               aNum1                  a200501112                  a200501123                  a200501134                  a200501145                  a20050115

表B记录如下:bID               bName1                   20060324012                  20060324023                  20060324034                  20060324048                  2006032408

实验如下:1.left join

sql语句如下: select * from Aleft join B on A.aID = B.bID

结果如下:aID               aNum                          bID                  bName1                   a20050111                1                      20060324012                   a20050112                2                     20060324023                   a20050113                3                     20060324034                   a20050114                4                     20060324045                   a20050115                NULL              NULL(所影响的行数为 5 行)

结果说明:               left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).B表记录不足的地方均为NULL.

2.right joinsql语句如下: select * from Aright join B on A.aID = B.bID结果如下:aID               aNum                          bID                  bName1                   a20050111                1                      20060324012                   a20050112                2                     20060324023                   a20050113                3                     20060324034                   a20050114                4                     2006032404NULL           NULL                          8                     2006032408(所影响的行数为 5 行)结果说明:        仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner joinsql语句如下: select * from Ainnerjoin B on A.aID = B.bID

结果如下:aID               aNum                          bID                  bName1                   a20050111                1                      20060324012                   a20050112                2                     20060324023                   a20050113                3                     20060324034                   a20050114                4                     2006032404

结果说明:        很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. 

转载请注明原文地址: https://www.6miu.com/read-5014521.html

最新回复(0)