这是一个奇怪的问题,但是对于这种行为的解释我有点沮丧:
背景:(不需要知道)
首先,我正在编写一个快速查询并粘贴一个列表,UNIQUERIDENTIFIER并希望它们在一个WHERE X IN (...)子句中是统一的.在过去,我UNIQUERIDENTIFIER在列表顶部使用了一个空(全零),以便我可以粘贴一组UNIQUERIDENTIFIER看起来像这样的统一:,'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'.这一次,为了避免点击零,我插入了一个NEWID()认为碰撞几率几乎不可能的想法,令我惊讶的是,这导致了数千个额外的结果,比如表的50 +%.
开始问题:(你需要知道的部分)
这个查询:
-- SETUP: (i boiled this down to the bare minimum)
-- just creating a table with 500 PK UNIQUERIDENTIFIERs
IF (OBJECT_ID('tempdb..#wtfTable') IS NOT NULL) DROP TABLE #wtfTable;
CREATE TABLE #wtfTable (WtfId UNIQUEIDENTIFIER PRIMARY KEY);
INSERT INTO #wtfTable
SELECT TOP(500) NEWID()
FROM master.sys.all_objects o1 (NOLOCK)
CROSS JOIN master.sys.all_objects o2 (NOLOCK);
-- ACTUAL QUERY:
SELECT *
FROM #wtfTable
WHERE [WtfId] IN …Run Code Online (Sandbox Code Playgroud) sql sql-server sql-server-2008-r2 sql-server-2012 sql-server-2014
在前面我想说:请不要建议替代解决方案,除非您可以在不修改BaseXXXXXX模式的类型的情况下完成它
也就是说,就我而言,这种行为远远超出了困惑,似乎使用new关键字来隐藏C#中的属性意味着WinRT XAML(Windows8,Metro,Windows Store App)绑定不再正常运行.我不知道为什么会这样.
这是一个例子:
C#:
namespace WinRtSandbox
{
public class BaseClass
{
public string Property1 { get; set; }
public int[] Property2 { get; set; }
public object Property3 { get; set; }
}
public class ModifiedClass : BaseClass
{
public new string Property1 { get; set; }
public new long[] Property2 { get; set; }
public new string Property3 { get; set; }
}
public sealed partial class MainPage : Page
{
public BaseClass Normal …Run Code Online (Sandbox Code Playgroud) 在此之前,我不是在寻找重写.这是呈现给我的,我似乎无法弄清楚这是否是一般的错误或由于脚本的特殊性而发生的某种句法疯狂.好的,用设置说:
Microsoft SQL Server标准版(64位)
版本10.50.2500.0
在位于通用数据库中的表上,定义为:
CREATE TABLE [dbo].[Regions](
[RegionID] [int] NOT NULL,
[RegionGroupID] [int] NOT NULL,
[IsDefault] [bit] NOT NULL,
CONSTRAINT [PK_Regions] PRIMARY KEY CLUSTERED
(
[RegionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
插入一些值:
INSERT INTO [dbo].[Regions]
([RegionID],[RegionGroupID],[IsDefault])
VALUES
(0,1,0),
(1,1,0),
(2,1,0),
(3,2,0),
(4,2,0),
(5,2,0),
(6,3,0),
(7,3,0),
(8,3,0)
Run Code Online (Sandbox Code Playgroud)
现在运行查询(从每个组中选择一个,记住没有重写建议!):
SELECT RXXID FROM (
SELECT
RXX.RegionID as RXXID,
ROW_NUMBER() OVER (PARTITION BY RXX.RegionGroupID …Run Code Online (Sandbox Code Playgroud)