重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
中括号其实是个神奇的东西,在sqlserver里括起来一般代表字段名或表名,为了避免和关键字冲突才用它的
创新互联是一家专注于网站设计制作、成都网站制作与策划设计,永登网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:永登等地区。永登做网站价格咨询:18982081108
你说的这个,你这样试验一下
select * from 表名 where name like '%[[]%'
你不能将两下数据库都打开,同一时间只打开一个,另一个数据库给它停了,手动的方法将其停止,试试
数据
create table test(col1 varchar(1),
col2 varchar(1))
insert into test values ('A','a')
insert into test values ('A','d')
insert into test values ('B','e')
insert into test values ('A','j')
insert into test values ('A','r')
insert into test values ('B','g')
insert into test values ('B','h')
insert into test values ('B','t')
执行
select col1, [col2]=stuff((select ','+[col2] from test t where col1=test.col1 for xml path('')), 1, 1, '') from test group by col1
结果
相应的表名和字段名你替换一下吧
很多数据库的专家就读
C扩儿
/'si:kul/
本人一直念“西口”,“C扣”
也有些人念“色扣”
但是请不要三个字母念:S—Q—L,这样是错的,会被业内人笑的。
SQLServer
[sikəu
'sə:və]
SQL server是一种服务器,如你在安装某些软件的时候需要它的支持才能正常运行。如果你的电脑上没有软件需要它支持,你完全可以把你删除掉
SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存储空间的浪费。可以通过数据库收缩技术对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。从而节省服务器的存储的成本。
官方解释:收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。
收缩后的数据库不能小于数据库最初创建时指定的大小。 或是上一次使用文件大小更改操作(如 DBCC SHRINKFILE)设置的显式大小。
比如:如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。
不能在备份数据库时收缩数据库。 反之,也不能在数据库执行收缩操作时备份数据库。
介绍:收缩指定数据库中的数据文件大小。
语法格式:
参数说明:
介绍:收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。
语法格式:
参数说明:
例如,如果创建一个10MB 的文件,然后在文件仍然为空的时候将文件收缩为2 MB,默认文件大小将设置为2 MB。这只适用于永远不会包含数据的空文件。
另附SqlServer常见问题解答
1)管理器不会主动刷新,需要手工刷新一下才能看到最新状态(性能方面的考虑)
2)很少情况下,恢复进程被挂起了。这个时候假设你要恢复并且回到可访问状态,要执行:
RESTORE database dbname with recovery
这使得恢复过程能完全结束。
3)如果你要不断恢复后面的日志文件,的确需要使数据库处于“正在还原状态”,
这通常是执行下面命令:
RESTORE database dbname with norecovery
原来SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高。我们可以通过DBCC MemoryStatus来查看内存状态。
SQL SERVER运行时会执行两种缓存:
1. 数据缓存:执行个查询语句,SQL SERVER会将相关的数据页(SQL SERVER操作的数据都是以页为单位的)加载到内存中来, 下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。
2.执行命令缓存:在执行存储过程,自定函数时,SQL SERVER需要先二进制编译再运行,编译后的结果也会缓存起来, 再次调用时就无需再次编译。
可以调用以下几个DBCC管理命令来清理这些缓存:
但是,这几个命令虽然会清除掉现有缓存,为新的缓存腾地方,但是Sql server并不会因此释放掉已经占用的内存。SQL SERVER并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整SQL SERVER可用的物理内存设置来强迫它释放内存。
解决SQLSERVER内存占用过高的方法:
1、清除所有缓存DBCC DROPLEANBUFFERS
2、调整SQLSERVER可使用的最大服务器内存。
在SQL管理器,右击实例名称
在属性实例属性里面找到内存选项
把最大内存改成合适的内存,确定后内存就会被强制释放,然后重启实例。再看看任务管理器,内存使用率就降下来啦。
1、查看连接对象
USE master
GO
--如果要指定数据库就把注释去掉
SELECT * FROM sys.[sysprocesses] WHERE [spid]50 --AND DB_NAME([dbid])='gposdb'
当前连接对象有67个其中‘WINAME’的主机名,‘jTDS’的进程名不属于已知常用软件,找到这台主机并解决连接问题。在360流量防火墙中查看有哪个软件连接了服务器IP,除之。
2、然后使用下面语句看一下各项指标是否正常,是否有阻塞,正常情况下搜索结果应该为空。
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS '开始时间',
[status] AS '状态',
[command] AS '命令',
dest.[text] AS 'sql语句',
DB_NAME([database_id]) AS '数据库名',
[blocking_session_id] AS '正在阻塞其他会话的会话ID',
[wait_type] AS '等待资源类型',
[wait_time] AS '等待时间',
[wait_resource] AS '等待的资源',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]50 AND DB_NAME(der.[database_id])='gposdb'
ORDER BY [cpu_time] DESC
查看是哪些SQL语句占用较大可以使用下面代码
--在SSMS里选择以文本格式显示结果
SELECT TOP 10
dest.[text] AS 'sql语句'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]50
ORDER BY [cpu_time] DESC
3、如果SQLSERVER存在要等待的资源,那么执行下面语句就会显示出会话中有多少个worker在等待
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS '开始时间',
[status] AS '状态',
[command] AS '命令',
dest.[text] AS 'sql语句',
DB_NAME([database_id]) AS '数据库名',
[blocking_session_id] AS '正在阻塞其他会话的会话ID',
der.[wait_type] AS '等待资源类型',
[wait_time] AS '等待时间',
[wait_resource] AS '等待的资源',
[dows].[waiting_tasks_count] AS '当前正在进行等待的任务数',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der
INNER JOIN [sys].[dm_os_wait_stats] AS dows
ON der.[wait_type]=[dows].[wait_type]
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]50
ORDER BY [cpu_time] DESC;
4、查询CPU占用最高的SQL语句
SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), text)) * 2
ELSE statement_end_offset
END - statement_start_offset)/2)
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC;
5、索引缺失查询
SELECT
DatabaseName = DB_NAME(database_id)
,[Number Indexes Missing] = count(*)
FROM sys.dm_db_missing_index_details
GROUP BY DB_NAME(database_id)
ORDER BY 2 DESC;
SELECT TOP 10
[Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
, avg_user_impact
, TableName = statement
, [EqualityUsage] = equality_columns
, [InequalityUsage] = inequality_columns
, [Include Cloumns] = included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s
ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d
ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC;
找到索引缺失的表,根据查询结果中的关键次逐一建立索引。