Tsql 查找是否禁用了表锁定

我想知道是否所有数据库中的所有表都禁用了表锁定。 所以我在sysindexes表或表级别的索引级别上检查这个属性 我怎么检查 问候 据我所知,无法禁用表级锁定。可以基于每个索引禁用页和行锁定 要检查这一点,请在sys.indexes(如果在SQL 2005或更高版本上)中查找allow_row_locks和allow_page_locks列。 如果在SQL 2000上,请使用INDEXPROPERTY函数检查IsPageLockDisallowed和IsRowLockDisallowed属性 S

使用TSqlParser

我正在尝试使用microsoft提供的TSql100Parser解析SQL。现在我在使用它的方式上有点困难。此外,缺少文档也无济于事。例如: 当我通过解析器运行一个简单的SELECT语句时,它返回一个包含SELECT语句的TSqlStatements集合。 问题是,TSqlSelect语句不包含WHERE子句等属性,即使该子句是作为类实现的。 解析器通过查看令牌流来识别WHERE子句。 所以,我的问题是,我是否正确地使用了解析器?现在,令牌流似乎是解析器最有用的功能 我的测试项目: public

Tsql 如何为SQL2008数据库中的所有表生成INSERT存储过程?

我有一堆表,需要为它们创建基本的INSERT存储过程 有人有这样做的方法吗?或者有一个好的开始吗?我们使用SSMS工具包。伟大的工具,一旦你得到它配置你喜欢。它将为您生成所有的积垢 一旦你得到它的设置,你只需右键点击一个表,并生成积垢。繁荣你把一切都做好了 该工具的另一个优点是集成到SSMS中 看一看 谢谢, Mike我们使用SSMS工具包。伟大的工具,一旦你得到它配置你喜欢。它将为您生成所有的积垢 一旦你得到它的设置,你只需右键点击一个表,并生成积垢。繁荣你把一切都做好了 该工具的另一个优点是

Tsql 从SP连接两个T-SQL存储过程的输出数据

现在我有两个返回数据集的存储过程,我想创建另一个存储过程来执行这两个存储过程并返回它们的组合数据集(到.Net应用程序) 这就像在两个存储过程上运行“EXEC”一样简单,还是我需要添加一些逻辑来组合这两个数据集?您可以逐个执行每个SP,应用程序(假设它基于.NET)将看到两个结果集。但这些结果不会合并到单个结果中,因此您需要使用DbDataReader.NextResult(): 如果您需要将结果组合到应用程序所关心的单个结果中,则需要将SPs的结果插入两个表值变量中,然后选择联接它们 或者,如

Tsql 用于获取一行中的值与另一行中的值之差的SQL查询

我的数据如下表所示 |项目编号|日期|值| -------------------------- |101 | 201002 | 5 | |102 | 201002 | 3 | |201 | 201002 | 7 | |202 | 201002 | 2 | |101 | 201003 | 6 | |102 | 201003 | 3 | |201 | 201003 | 7 | |202 | 201003 | 1 | 预期结果 |项目编号|日期|值| ------------------------

Tsql 具有多个透视/取消透视的T-SQL帮助

我不确定什么是最好的方法。我在一个表中有以下列 我需要像这样的产品表 我尽了最大的努力,但还是不明白。任何帮助都将不胜感激。试试看 SELECT group1 As Group, "X" as ColType, amtA1 as ColA, amtB1 as ColB, amtC1 as ColC UNION SELECT group1, "Y", amtA2, amtB2, amtC2 UNION SELECT group2, "X", amtA1, amtB1, amtC1

Tsql 大写字母前的T-SQL空格

这个问题不言自明。你能指出一种在字符串的每个大写字母之间加空格的方法吗 SELECT dbo.SpaceBeforeCap('ThisIsATestString') 会导致 This Is A Test String. CLR和正则表达式或26 replace语句区分大小写的collate子句和trim。假设SQL Server 2005或更高版本,这是根据以下代码修改的: 创建函数SpaceBeforeCap ( @str nvarchar(最大值) ) 返回nvarchar(最大值) 作

Tsql 基于带TOP的嵌套SELECT的SQL Server 2000更新

我试图用一个有序查询中的x行数更新一个sql表,其中x是100000的余额——这是以前的结果。我使用ROWCOUNT来限制结果的数量,因为x是一个参数,但我认为这不起作用 有人能建议一个没有光标的修复或替代方案吗 DECLARE @Top int SET @Top = 100000 - @CountRecords SET ROWCOUNT @Top UPDATE UpdateTable SET UpdateField = 'SomeValue' WHERE

Tsql 合并表并保留最低值

抱歉,我知道合并在Sql Server中是完全不同的,但我想不出还有什么可以称之为合并 我有一个用户定义的表类型 ------------------------------------------------------------------- | Id | Foreign Key | Height | Weight | Width | Length | ---------------------------------------------------------

Tsql 无符号64位值与数字(20,0)的用户定义类型

假设我想创建一个表,其中有一些列,我想包含64位无符号整数。我可以用几种不同的方法来解决这个问题,其中一些方法可能无效或产生后果: 使用NUMERIC(20,0)并添加一个检查约束,以确保该值不是负值,并且在64位无符号整数的范围内(即>=0和使用NUMERIC(20,0)还有一个限制0的检查约束,你希望值>2^63-1吗?或者只是不希望值2**63-1。我不知道为什么有人否决了这个问题。这是一个合理的问题。100000000000000000呢?这不会进入bigint选择CAST(100000

TSQL-将值从SourceTable插入或更新到TargetTable(无需删除)

我希望通过相应地插入或更新,将所有数据从SourceTable推送到TargetTable。我不需要从TargetTable中删除任何条目,即使它们不在SourceTable中 这就是我目前所拥有的。MERGE命令是否是最合适的方法?我看了一些例子,但不太清楚如何进行 我当前的解决方案截断整个表,然后插入数据。此后,我意识到需要保留TargetTable中以前存在的值的PK值。如何根据TargetTable的PublicRefId列中是否存在AssociatedRefId将其更改为INsert或

Tsql 这两个T-SQL语句之间的区别是什么?

在正在工作的SSIS包中,有一些SQL任务创建用于保存导入数据的暂存表。所有声明均采用以下形式: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.tbNewTable') AND type in (N'U')) BEGIN TRUNCATE TABLE dbo.tbNewTable END ELSE BEGIN CREATE TABLE dbo.tbNewTable (

Tsql T-SQL确定历史记录表中的状态更改

我有一个应用程序,它将生产表中记录的更改记录到历史记录表中。历史记录表基本上是生产表的字段副本,还有一些额外的列,如上次修改日期、上次用户修改日期等 这很有效,因为只要记录发生更改,我们就可以获得记录的快照。但是,这使得很难确定记录的唯一状态更改。下面是一个例子 BoxID StatusID SubStatusID ModifiedTime 1 4 27 2011-08-11 15:31 1 4

Tsql 为什么不是';我的XML日期接受日期是否为YYYY-MM-DD?

我不明白为什么我为日期创建的xsd规则不起作用。 规则是: 根据以下形式“YYYY-MM-DD”中的规定,当SQL中的XML解析器遇到2006-12-15时,它会失败,因为它不接受有效的日期,但如果我交换12和15轮,它会接受有效的日期。使用xs:string和regex限制的可能解决方案: <xs:element name="scan_date" type="dateType"/> <xs:simpleType name="dateType"> <xs:

Tsql DATEADD使用十进制-解决方法?

我正在尝试做下面的事情(我已经简化了问题,尝试解决这个单独的部分) 我意识到这将不起作用,因为dateadd的number参数被截断为int 我正试图想出一种方法,将0.2转换为小时数,然后能够使用类似的东西(我同意它与小时一样精确) 你知道如何开始吗?我发现很难找到任何东西来获得一个日期部分在另一个日期部分的十进制表示 它必须是一个基于集合的性能查询 从理论上讲,我必须使十进制年份也可以使用,但我将把它作为一个单独的问题来讨论…1周=7天=168小时=10080分钟 0.2周=2016分钟 打

Tsql 要从SQL Server代理作业存档的Zip文件

我已经在Access vba中编写了一个程序,该程序将进入一个固定目录,压缩该目录(和子目录)中的所有文件,并将zip存档放在一个(通常)新目录中进行存档存储。这是我访问前端和相关文件的备份例程。我每天都在我的客户机上运行它,使用我的个人凭证。现在我想从我的小型SQL Server机器上运行它,因为它更健壮、更可靠。我更喜欢在T-SQL中完成这一切,而不是“调用”访问例程 我做了一些研究,但找不到任何确切的方法来帮助我解决这个问题。有人能给我指点帮助吗?以下是Access VBA代码: Func

Tsql 第一个空格后的SQL修剪

我需要在字符串中的第一个空格后修剪所有内容 例:阿斯匹林口服液 我只需要阿司匹林。你可以在空格上做一个字符串。拆分(“”),然后取结果的[0]位置 在TSQL中: declare @test varchar(30) select @test = 'Asprin Oral' select substring(@test, 1, charindex(' ', @test + ' ')-1) 或者像@GilM所说的: declare @test varchar(30) select @test =

Tsql 将新ID级联到第二个相关表

我有两张桌子,联系人和联系人。我正在将记录导入Contacts表,需要运行SP在Contacts_Detail表中为Contacts中的每个新记录创建一条记录。联系人表中有一个ID,联系人详细信息表中有一个匹配的ID 我用它将记录插入Contacts_Detail,但得到了“Subquery返回的值超过1”错误,我不知道为什么。联系人中有多个记录需要在联系人详细信息中有匹配的记录 Insert into Contacts_Detail (ID_D) select id from Con

Tsql 有效地应用两个SQL Server表之间的差异

我有一个每天一次的摄取案例,在这个案例中,我将通过FTP获得一个大文件,其中包含4个数据库表的最新版本 对于每张桌子,我想: 截断临时数据库中的表 将FTP文件BCP到该表中 查找暂存表和生产表之间的差异(IUD) 将所需的宫内节育器放入生产台,使其与暂存台匹配 我相信这是一个相当普遍的问题,但我不是100%确定最好的解决方法 对于此类问题是否有内置的T-SQL功能,或者我是否只需要执行各种连接来查找插入/更新/删除的记录并手动执行它们?我相信我可以通过第二种方式做到这一点,但我们仍然非常感谢您

Tsql 如果ID/名称重复,请选择单个记录

这似乎是一个非常简单的问题,但我现在似乎无法解决它 以下是我从当前存储过程中获取的数据的简化视图: ID Name Class Desc --- ----- ------ ----- 84 Calvin J. 2B 53 Fred D. 3B 53 Fred D. ADJ Change/Correction 47 Mary F. 3A 47 Mary

TSQL使用运行总计选择随机行

TSQL,我正在使用SQL 2012,但将使用以前版本中的任何东西。我知道如何使用NEWID从表中选择前X个随机行。另外,我知道如何使用多种方法选择运行总数,如CTE等 但是,如何将这两个结果组合到一个查询中呢?所以我想选择3条随机记录,不少于3条,其中运行总数不超过15条。我的头绕不住这个 使用以下简单的表格和数据: CREATE TABLE TblTest ( id int not null identity(1,1) primary key, value int not

Tsql 如何在存储过程中动态停止/触发触发器?

假设我在数据库中有一个表MyTab。我有一个触发器,例如,这个表上的delete触发器。 然后在一个存储过程中,我尝试从这个表中删除数据,但只想为这个删除停止delete触发器。之后,将触发器恢复正常。是否可以在存储过程中包含以下代码: stop trigger on MyTab; delete from MyTab where ...; put the trigger back; 如前所述,您可以禁用和启用触发器,尽管我可能会将其放入try-catch和/或事务中,这样您就不会因为错误而被禁

Tsql 用于填充空值的t-sql查询

我是sql server 2012的新手,希望了解如何使用t-sql创建以下输出。有许多俱乐部编号,因此必须有一个循环或光标。请帮忙 桌子 club_number name number ---------- -------------------------------------------------- ----------- 355292 NULL

Tsql 如何检查多个数据库中的过程是否相同?

情况是,我们有一个SQL实例,上面有许多数据库。大多数数据库都有一个特定的过程 是否有方法使用SQL检查此过程的主体在所有数据库中是否相同 我想这样做,因为有时我需要对某些过程、函数或视图进行“大规模部署”,但在这种情况下,我不确定过程创建后是否未被修改 下面的t-sql将为您提供现有存储过程的定义。从这里,您可以尝试测试这些定义是否正确 select o.name, m.definition from sys.objects o left join sys.sql

Tsql 获取具有TOP子句的内联视图中的最大值

我试图在内联视图中获取最大值,但它在内联视图中返回最大值,就好像内联视图没有TOP子句一样 下面查询中的表dbo.Details包含650条记录。我需要获取前200条记录的最大值,但下面的查询将获取BatchNumber=341的详细信息表中所有记录的最大值 我是否遗漏了一些微妙之处?我的目标是在前200条记录中获得最大值。我使用的是SQL Server 2008 R2 SELECT MAX(a.DetailsRecordID) FROM (SELECT TOP(200) npd.Deta

将DateTime插入DateTime字段TSQL

我试图从一个C程序调用SQL Server 2012 Express中的一个存储过程,将一个日期时间数据类型插入到一个也是日期时间的列中 由于某些原因,在从字符串转换日期和/或时间时,我不断收到有关对话失败的错误 我已经检查了我的SQL server中的区域性设置,该设置为us_english,但日期时间格式是ISO标准 这是存储过程中的代码。这些值正是C应用程序传递它们的方式 USE testdb; DECLARE @Name NVARCHAR(50) = 'Somename', @

Tsql SQL Server SUM()用于不同的记录

我有一个名为Users的字段,我想在该字段上运行SUM,该字段返回所有不同记录的总和。我认为这会起作用: SELECT SUM(DISTINCT table_name.users) FROM table_name 但它并没有选择不同的记录,它只是像运行SUMtable_name.users一样运行 要仅添加此字段中的不同记录,我需要做什么?使用计数 您可以使用子查询: select sum(users) from (select distinct users from table_name);

Tsql 没有特定列标题的行到列

我有一个查询,返回的数据是行,我需要更改结果,使结果是列而不是行。我做了研究,发现这篇文章有一个可以使用的动态查询,但我的情况似乎无法使用该解决方案。这个解决方案似乎依赖于每一行都有一个唯一的名称,可以用作列名,我没有 我的数据包含客户访问我们工厂的记录。有些客户在同一时间段内只会看到我们一次,有些客户会看到我们很多次,因此我们无法预测在给定时间段内每个客户的访问量。注意:ID10219只有一次访问,5180有3次,5199有很多次访问 ID Task V

Tsql 使用带日期的IsNull

我有以下TSQL代码: Declare @MyDate datetime Select @MyDate = ISNULL(T.requireddate, Convert(DateTime, '01/01/2013', 101)) from myTable T where T.somekey = somevalue Select @MyDate 输出为空。为什么不是01/01/2013?您确定select返回任何行吗 如果该选择不返回任何行,那么@MyDate将为null 试一试 因为D

Tsql 使发布脚本仅在正确的服务器上运行

我在部署脚本中添加了一个tsql测试,使它们只在应该运行的服务器上运行 现在,我想确保,如果服务器运行的版本与脚本创建时的版本不同,它们将不会运行 版本(变更集)存储在数据库的扩展属性中,因此我想添加tsql,将该值与正在pulbished的变更集进行比较。我已经有了这个价值 我没有的是在创建脚本时(在msbuild中)获取当前数据库变更集(在目标数据库的扩展属性中)值的机制。我通过将$(变更集)与存储部署脚本版本号的目标数据库扩展属性中的值进行比较来解决它(在部署脚本顶部包含的sql脚本中)

Tsql 总结数据孤岛

我已经读了很多关于数据孤岛的书,并使用CTE或许多子查询进行了总结。大多数人似乎依靠聪明的数学来计算日期,这看起来很酷,但我认为这对我不起作用 我们有许多车辆数据记录器根据不同的时间表发送状态更新。我正在寻找一种更快、非循环的方法来总结某些状态 节点ID设备标识符 LogId日志条目主键 AssembledTime在设备上组装记录时 ReceivedTime在服务器上接收记录时 速度记录时的速度 StatusText可以包含多个关键字 数据通常在跳闸结束时进行处理。(点火开关打开至点火开关关

改进TSQL蛮力相似性查询

我需要将零件分配给各个组。每个组都有显示其职责范围的各种文本字符串。要检查的部分也由它们自己的文本字符串标识。目前,我正在对每个组的每个部分进行蛮力相似性检查,并返回最佳相似性分数。这是可行的,但当然是非常缓慢的 我希望你能以不同的方式看待这件事。这两个表中的文本字符串都是单词,在进行检查之前,我认为没有一种好的方法来组织这些字符串,以减少我必须运行相似性代码的次数 下面是一个例子: IF OBJECT_ID('tempdb..#Parts') IS NOT NULL DROP TABL

TSQL:从层次结构的顶部到底部的总和

我正在尝试做一些关于多层次结构的运行总计 样本表。我添加了空格来强调分组 +----------------+----------------+------------+ | Manager | Employee | Cost | +----------------+----------------+------------+ | Donald Torres | Pamela Jordan | 7,250.78 | |

Tsql 连接列的大小写条件

Msg 156,第15级,状态1,第8行 关键字“CASE”附近的语法不正确 我正在尝试根据列值连接列 如果案例条件1为真,那么我想加入 在im.ItemNumber=左侧(tr.ItemNumber,len(tr.ItemNumber)-4) 如果情况2为真,则 在tr.ItemNumber=im.LegacyItemNumber上 SELECT im.Category as RootCategory,GETDATE() AS LoadDate,tr.*

Tsql 分区中按顺序排列的派生列

使用SQLServer2008R2 如果有超过1行类型的人口统计变化,我需要删除除每人1行以外的所有类型,但人口统计变化的类型是加权的,其中一些类型比其他类型更重要。我不知道这些数据会包含什么,但如果某个联系人有更重要的数据,我希望它能上升到顶部 我试过: ;WITH cte AS ( SELECT lastname, firstname, FieldChanged, Case 'FieldChanged' When 'firstname' then 0 W

Tsql Update语句,其中一列依赖于另一个更新的列

我想更新表中的两列,其中一列取决于另一个更新列的计算。计算相当复杂,所以我不想每次都重复,我只想使用新更新的值 CREATE TABLE test ( A int, B int, C int, D int ) INSERT INTO test VALUES (0, 0, 5, 10) UPDATE test SET B = C*D * 100, A = B / 100 所以我的问题是,在一次查询中,是否可以将50作为

Tsql 查找两个日期之间的天数、月数和年数

我试图获得两个日期之间的年、月和天数。 但当日期如下所示时,它会给出错误的输出(FromDate的月份部分大于Todate) 应该是4个月零29天。请告诉我如何才能获得所需的输出。 提前谢谢也许这是正确的 声明@FromDate='2010-10-27' 声明@Todate date='2012-03-02' 挑选 DATEDIFF(yy,@FromDate,@Todate)表示年份, DATEDIFF(mm,@FromDate,@Todate)作为月份, DATEDIFF(dd,@FromDa

Tsql 如何选择销售业绩最好的员工

我在数据库作业中遇到了这个问题 我需要回答这个问题: 选择员工的姓名和电子邮件地址 这是本月个人销售额最高的 因此,我基本上需要选择当月销售额最高的员工 以下是我所拥有的: SELECT FirstName + ' ' + LastName as 'Employee Name', Email FROM Employee INNER JOIN Sale ON Employee.EmployeeNumber = Sale.EmployeeNumber GROUP B

Tsql SQL Server:将字符串拆分为行

如何从下面转换数据: CODE COMBINATION USER 1111.111.11.0 KEN; JIMMY 666.778.0.99 KEN 888.66.77.99 LIM(JIM); JIMMY 到 我知道在SQL Server 2016中,这可以通过拆分字符串函数来完成,但我的产品是SQL Server 2014。您需要使用自定义项在每行上拆分它 CREATE FUNCTION [DBO].[FN_SPLIT_STR_TO_COL] (@T

Tsql T-SQL过程参数名称

我必须创建一个与excel列具有相同参数名称的过程。有些人喜欢这样的“xxx/xxx”或“xxx-xxx”。在这样的存储过程中,有没有办法命名参数?变量名中不允许使用正斜杠(/)或破折号(-) 根据,这意味着允许的字符为: Unicode标准3.2中定义的字母。Unicode 字母的定义包括从a到z的拉丁字符, 从A到Z,以及其他语言的字母字符 来自基本拉丁语或其他国家文字的十进制数字 at符号(@)、美元符号($)、数字符号(#)或下划线(35;) 好的,首先,为什么要使用特殊字符?这就像说

Tsql 缺少SQL Server依赖项

这可能是我不知道依赖是什么意思的一个例子 当我运行以下查询时,我得到的列表(更多条目)与我选择菜单选项“查看依赖项”(仅限第一个节点级别)时的列表略有不同,这是为什么?我应该补充一点,我忽略了视图依赖关系,例如,我有一个2个外键关系设置为2个不同的表(配置几乎相同),但是视图依赖关系中只显示了1个,而在下面的查询中可以看到这两个关系 我从另一个帖子上得知: SELECT DISTINCT pt.object_id PrimaryTableID, pt.name PrimaryTable

Tsql 在主字符串中查找并替换字符串

我试图在主字符串中找到一个字符串并将其删除 例如: @Main_text = 'some text some text... // remove text remove text \\ some text some text' 我想删除以下文本: // remove string remove string \\ of the main text 我试过的 declare @main_text varchar(255) = 'some text some text... // remove

Tsql 将多个记录更新为单个记录

我正在尝试合并具有相同名字、姓氏、SSN和DOB的客户记录。下面是我们客户表的一个小样本,我在其中确定了符合合并标准且应合并的客户。名称和SSN已更改,但流程将保持不变。通过在FirstName、LastName、SSN和DOB上将Customers表连接到自身,并使用一些交叉应用,密集等级,和LAGmagic-我能够将每个客户记录放在它自己的行中,并确定哪些记录应该合并到哪个帐户中-我们决定将记录合并到最大的CID中 CID FirstName LastName SSN

Tsql SQL Server:从VARCHAR转换为DATETIME

当前日期格式:12-18-2018-03:14:48 我想转换成:2018-12-18 03:14 当前正在使用SQL Server 2008 我使用以下代码语法: DECLARE @input VARCHAR(35) = '12-18-2018-03:14:48' SELECT CONVERT(DATETIME, @input, 120) 错误: 将varchar数据类型转换为datetime数据类型导致值超出范围 请帮忙。谢谢大家! 我不确定您当前的日期时间文字是否属于SQL Serve

Tsql 多个自联接以查找可传递子集(团)

简单地说,我有一个表示关系的表。表中的行表示我的关系中的对。换句话说,第一行指示id 1与id 4相关,并且id 4与id 1相关。希望你不难看出我的关系是对称的,尽管表格以简洁的形式显示了这种对称性 +-----+-----+ | id1 | id2 | +-----+-----+ | 1 | 4 | | 3 | 1 | | 2 | 1 | | 2 | 3 | | 2 | 4 | | 5 | 1 | +----

月度总结中的差距-TSQL

我有一些事件,比如命名风暴,我根据该事件的第一个交易日期,对滚动月份的交易进行求和 例如,飓风Nate的第一个日期是2017-10-08,因此我有一个数据集,显示事件名称、首次损失日期、月号以及事件发生后每月窗口的开始和结束日期: 使用这个,我加入到存储交易的表中,对金额求和,以获得每个月的总数。这一部分确实有效-但如果事件窗口中没有任何事务,我不会返回任何数据-但我需要返回一行,金额显示为0.00或NULL-任何一种方式都可以,我只需要显示所有月份以供报告之用 下面是一些创建临时表的示例数据,

如何在TSQL/SQL Server Express中创建列AUTOINC?

Server Explorer表格创建工具会自动为您创建的每个表格添加一个Id列: 但我注意到,尽管它确实被设置为主键,但它并没有指定它是AutoInc列 因此,我将其直接添加到T-SQL选项卡,但这被认为是一个语法错误: 它已经是一个自动增量,我不需要这样指定它,或者如果我需要,我做错了什么?在SQL Server中,它不是一个自动增量,而是一个标识: CREATE TABLE dbo.Genres ( [GenreId] INT IDENTITY(1,1) NOT NULL PR

Tsql 从T-SQL中的工作日整数转换工作日名称

没有回答我的问题,那就是 我将一周中的某一天(工作日)作为一个整数(其中1=Sun,2=Mon,等等),并且我想获取与之对应的工作日的名称(例如,'Mon'或'Monday') 我知道我可以使用case表达式,如下所示: case @wkday --int when 1 then 'Sun' when 2 then 'Mon' when 3 then 'Tue' when 4 then 'Wed' when 5 then 'Thu' w

上一页   1   2   3   4   5    6  ... 下一页 最后一页 共 156 页