解决方案 »
- 请教游标和动态SQL问题
- 请问连接的问题
- SQL Server --日期型数据保存问题,请大家帮忙!
- 本地的access表与远程的sqlserver作连接查询?
- 急!! 求SQL語句
- SQL2000死锁问题
- 帮看看这个update语句怎么出错了
- 在使用企业管理器时提示缺少repbr.dll
- SQL server 2005数据库还原数据库时错错?system.Data.SqlClient.SqlError: 媒体集有 2 个媒体簇,但只提供了 1 个。必须提供所有成员。 (Microsoft.SqlServer.Smo)请高手指点
- 从别人机子上拷的数据库要怎样还原啊?
- 如何统计分组里每个组的个数,请老师帮一下忙
- 追加100分,大神们来帮帮我
我上次在2014上面执行,CTP1还有759种,2005我没环境
-- 一般我们用DISTINCT来去重
select count(wait_type) from sys.dm_os_wait_stats;
select count(distinct wait_type) from sys.dm_os_wait_stats;
-- 以上结果都是490,也就是说wait_type是没有重复的
-- 但是,进行如下操作,系统会告诉你有重复值!!!
-- 获取一个表dbo.WaitStats存储wait_type;清空数据
SELECT wait_type INTO dbo.WaitStats FROM sys.dm_os_wait_stats;
TRUNCATE TABLE dbo.WaitStats;
-- 对dbo.WaitStats的wait_type添加主键约束,再插入
ALTER TABLE dbo.WaitStats ADD CONSTRAINT PK_WaitStats PRIMARY KEY(wait_type);
INSERT INTO dbo.WaitStats
SELECT wait_type FROM sys.dm_os_wait_stats;
-- 失败,“违反了 PRIMARY KEY 约束 'PK_WaitStats'。不能在对象 'dbo.WaitStats' 中插入重复键。”
查到了,20082R2中这个值重复了,你把代码改成这样一样重复:
-- 一般我们用DISTINCT来去重
select count(wait_type) from sys.dm_os_wait_stats;
select count(distinct wait_type) from sys.dm_os_wait_stats;
-- 以上结果都是490,也就是说wait_type是没有重复的
-- 但是,进行如下操作,系统会告诉你有重复值!!!
-- 获取一个表dbo.WaitStats存储wait_type;清空数据
SELECT wait_type INTO dbo.WaitStats FROM sys.dm_os_wait_stats;
ALTER TABLE dbo.WaitStats ADD CONSTRAINT PK_WaitStats PRIMARY KEY(wait_type);我就是这样查到这个重复值的
insert into waitstats select distinct ... from ...
SELECT COUNT(wait_type)
FROM sys.dm_os_wait_stats ;
SELECT COUNT(DISTINCT wait_type)
FROM sys.dm_os_wait_stats ;SELECT wait_type
INTO #t
FROM sys.dm_os_wait_stats
GROUP BY wait_typeALTER TABLE [#t] ALTER COLUMN [wait_type] NVARCHAR(50) COLLATE Chinese_PRC_90_CI_AI
SELECT COUNT(wait_type)
FROM #t ;
SELECT COUNT(DISTINCT wait_type)
FROM #t ;
SELECT DISTINCT wait_type
FROM sys.dm_os_wait_stats
WHERE [wait_type] = 'MISCELLANEOUS'
SELECT DISTINCT wait_type COLLATE Chinese_PRC_90_CI_AI
FROM sys.dm_os_wait_stats
WHERE [wait_type] = 'MISCELLANEOUS' COLLATE Chinese_PRC_90_CI_AI
ORDER BY wait_type COLLATE Chinese_PRC_90_CI_AI
感谢版主!
上面有个代码我确实是Copy到论坛上的时候Copy错了;应该是
INSERT dbo.WaitStats SELECT wait_type FROM sys.dm_os_wait_stats;
另外,我之前也是发现了和你一样的那个重复值MISCELLANEOUS
可是,确实是奇怪啊为什么2008R2下会报错
INSERT dbo.WaitStats SELECT DISTINCT wait_type FROM sys.dm_os_wait_stats;
这样也不行!!!
SQLServer对“重复的元组”是如何定义?DISTINCT的时候不考虑排序规则?
select wait_type,count(wait_type) as cnt from sys.dm_os_wait_stats
group by wait_type having count(wait_type)>1
MISCELLANEOUS 2
可是啥都没有
所以,版主,这归结为排序规则问题啦?
group by wait_type COLLATE Chinese_PRC_90_CI_AI
having count(wait_type)>1这样就能出来
MISCELLANEOUS 2
了
这种情况我测试了,没有重现过而且我看了下打过sp2的库里面
只有一行记录SELECT wait_type
FROM sys.dm_os_wait_stats
WHERE [wait_type] = 'MISCELLANEOUS'
ALTER TABLE dbo.ConsumeInfo SET (LOCK_ESCALATION = TABLE)
锁升级问题,上个月将数据临时转到2005上时候遇到这问题,虽然说SQLServer默认锁升级是TABLE,但是如何如何显示设置啊,如果要设置为其他的还真不知道,2005上
Thanks!
INTO #tb
FROM sys.dm_os_wait_stats
WHERE [wait_type] = 'MISCELLANEOUS'
--2
SELECT name ,[collation] FROM [tempdb].sys.[syscolumns] AS s WHERE id=OBJECT_ID('tempdb..#tb')
SELECT DISTINCT wait_type FROM #tb
ORDER BY wait_type COLLATE Chinese_PRC_CI_AS
--1
sql server 2005好像没有办法设置这个参数。
select count(distinct wait_type) from sys.dm_os_wait_stats
-- 都一样 = 202
select wait_type COLLATE Chinese_PRC_90_CI_AI,count(wait_type) as cnt from sys.dm_os_wait_stats
group by wait_type COLLATE Chinese_PRC_90_CI_AI
having count(wait_type)>1
select wait_type ,count(wait_type) as cnt from sys.dm_os_wait_stats
group by wait_type
having count(wait_type)>1
-- 一样,没有重复的
select count(wait_type) from sys.dm_os_wait_stats where wait_type = 'MISCELLANEOUS'
-- 这个值也没有重复sys.dm_os_wait_stats是一个系统视图,不同版本中其所调用的系统基表是不一样的再回到SQL Server 2008 R2 Chinese_PRC_CI_AS 的环境下,居然‘MISCELLANEOUS’在重音敏感的情况下没区别,当重音不敏感时(_AI)有区别
所谓的重音
AI 指定不区分重音,AS 指定区分重音。如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项, 比较还将重音不同的字母视为不等。区分重音字符和非重音字符。例如,“a”和“?”将被视为不同的字符。如果未选择此项,在排序时,SQL Server 将把字母的重音形式和非重音形式视为相同。
我查了一下,sql server 2008在这方面也有其他的bug,所以说不好,你发现的问题真是一个bug:修复: 前缀搜索使用的扩展的字符或重音在 SQL Server 2008年中返回错误的结果
http://support.microsoft.com/kb/973090/zh-cn