标签: sql-server-2014

在SQL Server 2014中使用聚簇列存储索引时,具有大量列的表仍然是反模式吗?

阅读有关SQL Server 2014中的聚簇列存储索引的信息,我想知道是否有一个包含大量列的表仍然是一种反模式.目前为了缓解具有大量列的单个表的问题,我使用垂直分区但是具有可用的聚簇列存储索引,这不应该是必需的.这是正确的还是我错过了什么?

示例: 让我们以性能计数器的日志为例,原始数据可能具有以下结构:

?????????????????????????????????????????????????????????????????
?       Time       ? Perf1 ? Perf2 ? ... ? ... ? ... ? Perf1000 ?
?????????????????????????????????????????????????????????????????
? 2013-11-05 00:01 ?     1 ?     5 ?     ?     ?     ?        9 ?
? 2013-11-05 00:01 ?     2 ?     9 ?     ?     ?     ?        9 ?
? 2013-11-05 00:01 ?     3 ?     2 ?     ?     ?     ?        9 ?
? 2013-11-05 00:01 ?     4 ?     3 ?     ?     ?     ?        9 ?
?????????????????????????????????????????????????????????????????

拥有1000列这样的表是邪恶的,因为一行很可能跨越多个页面,因为通常不太可能对所有度量感兴趣,但查询总是会产生IO成本等等.等等..解决这种垂直分区通常会有所帮助,例如,可以按类别(CPU,RAM等)对不同表中的性能计数器进行分区.

相反具有这样的表作为一个聚集列存储索引不应该出现这样的问题,因为数据将被存储列明智的,涉及对每个查询的IO将大约只 …

sql-server sql-server-2014 columnstore

6
推荐指数
1
解决办法
260
查看次数

我们可以在SQL Server 2014上恢复SQL Server 2008R2备份吗?

目前,我们的一个产品在SQL Server 2008R2上运行.

对于新安装,客户端希望使用SQL Serer 2014,因为在此位置Microsoft不会销售SQL Server 2008R2的许可证.

sql-server sql-server-2008-r2 sql-server-2014

6
推荐指数
1
解决办法
3万
查看次数

无法加载文件或程序集Microsoft.SqlServer.TransactSql

数据库项目构建失败.错误详情:

错误:MSB4018:"SqlBuildTask"任务意外失败.System.IO.FileNotFoundException:无法加载文件或程序集"Microsoft.SqlServer.TransactSql,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91"或其依赖项之一.该系统找不到指定的文件.文件名:'Microsoft.SqlServer.TransactSql,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91'

我还在stackoverflow 链接上查看了这个答案.另请下载SQL Server数据工具12.0.41012.0,但仍然面临此错误.需要帮助来构建数据库,以便我可以在Azure上发布我的数据库.

问候.

sql-server azure sql-server-2014 sql-server-data-tools azure-sql-database

6
推荐指数
1
解决办法
6036
查看次数

SQL Server 2014插入NOT IN的位置

有2个表.第一个有fname(名字),lname(姓),第二个有很多列,包括:( salutation先生,博士等),fname(名字),mname(中间名),lname(姓),独特标识和日期.

我希望创建包含第三表中Salutation,fname,mname,lname,uid,added从另外2本表中的信息,然后我将丢弃该第一表和重新创建第二表中删除那些列.

这就是我所拥有的:

CREATE TABLE MyTable
(
    Id  int  IDENTITY (1, 1) PRIMARY KEY,
    Salutation  varchar(20) NULL DEFAULT (NULL),
    Fname  varchar(30) NOT NULL,
    Mname  varchar(30) NULL DEFAULT (NULL),
    Lname  varchar(30) NOT NULL,
    Uid  uniqueidentifier NULL DEFAULT (NULL),
    Added  Date NOT NULL DEFAULT (getdate())
);

INSERT INTO MyTable (Fname, LName)
   SELECT Fname, Lname 
   FROM TABLE1
Run Code Online (Sandbox Code Playgroud)

这是我困惑的地方:

INSERT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-insert sql-server-2014

6
推荐指数
1
解决办法
570
查看次数

引用表未通过实体框架5.0进入我的模型

我正在使用MVC 4和实体框架5.0,我有一个数据库,这个数据库包含6个名为如下的表.

tblUser_family
tblUser_location
tblUser_info
tblUser_photo
tblUser_settings
tblUser_social
Run Code Online (Sandbox Code Playgroud)

当我创建.edmx文件时,设计器一个表中只有5个表"tblUser_settings"没有到来,而所有表都是通过foreginKeys连接的.

我收到了以下错误

错误1错误6004:表'Community.dbo.tblUser_settings'由关系引用,但无法找到.

c# asp.net-mvc-4 entity-framework-5 sql-server-2014 sql-server-2014-express

6
推荐指数
3
解决办法
7588
查看次数

为什么SQL Server代理无法启动?

我刚刚在Windows Server 2012的顶部安装了我的SQL Server 2014.但是安装后SQL Agent没有启动.有人可以告诉我,我可以做些什么来解决这个问题?PFA截图同样如此.

在此输入图像描述

sql-server-2014

6
推荐指数
1
解决办法
2万
查看次数

表值参数的排序顺序是否保证保持不变?

我需要知道我是否需要在我的自定义表类型中添加一个排序列,然后我可以使用它来进行排序,或者如果我可以相信即使没有这样的列,参数的顺序也保持不变.

这是我的类型:

CREATE TYPE [dbo].[VwdCodeList] AS TABLE(
    [VwdCode] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

这是使用它的sql之一:

/// <summary>
///     Inserts all new WatchListCodes for a given watchlist
/// </summary>
public const string InsertWatchListCodes = @"
INSERT INTO [dbo].[WatchListCodes]
   ([WatchListID]
   ,[VwdCode]
   ,[Sort])
 SELECT @WatchListID, VwdCode, ROW_NUMBER()OVER(ORDER BY (SELECT 1)) 
 FROM @VwdCodeList;";
Run Code Online (Sandbox Code Playgroud)

正如你所看到我正在使用ROW_NUMBER获取sort-column值.

我是否还需要在表类型中添加排序列,还是保证(记录)它保持不变?它似乎工作.

这是我使用它的ADO.NET代码:

SqlParameter vwdCodeListParameter = insertWatchListCodeCommand.Parameters.Add("@VwdCodeList", SqlDbType.Structured);
vwdCodeListParameter.TypeName = "[dbo].[VwdCodeList]";
vwdCodeListParameter.Value = WatchListSql.GetVwdCodeRecords(newVwdCodes, true);
int inserted = insertWatchListCodeCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

GetVwdCodeRecords返回IEnumerable<SqlDataRecord>一个IEnumerable<string>.


谢谢大家.如果未来的读者有兴趣知道我如何保证排序顺序.我通过添加另一列修改了表格类型:

CREATE TYPE [dbo].[VwdCodeList] AS TABLE( …
Run Code Online (Sandbox Code Playgroud)

c# sql-server ado.net table-valued-parameters sql-server-2014

6
推荐指数
1
解决办法
578
查看次数

无法将空字符串传递到非空数据库字段

我很难接受一些非常直截了当的事情.我有一个SQL Server数据库,我正在尝试使用空字符串更新不可为空的varchar或nvarchar字段.我知道这是可能的,因为空字符串''一样的东西NULL.但是,使用它TADOQuery,它不允许我这样做.

我正在尝试更新现有记录,如下所示:

ADOQuery1.Edit;
ADOQuery1['NonNullFieldName']:= '';
//or
ADOQuery1.FieldByName('NonNullFieldName').AsString:= '';
ADOQuery1.Post; //<-- Exception raised while posting
Run Code Online (Sandbox Code Playgroud)

如果字符串中有任何内容,即使只是一个空格,它也会像预期的那样保存得很好.但是,如果它是一个空字符串,它会失败:

不可为空的列无法更新为Null.

但它不是空的.它是一个空字符串,应该可以正常工作.我发誓我过去曾多次通过空串.

为什么我会收到此错误,我应该怎么做才能解决它?


额外细节:

  • 数据库:Microsoft SQL Server 2014 Express
  • 语言:Delphi 10 Seattle Update 1
  • 数据库驱动: SQLOLEDB.1
  • 正在更新的字段: nvarchar(MAX) NOT NULL

sql-server delphi ado sql-server-2014 delphi-10-seattle

6
推荐指数
1
解决办法
1033
查看次数

从sql server链接服务器连接到Sphinx

我试图从SQL Server Management Studio连接到Sphinx作为链接服务器.我尝试了以下查询:

EXEC master.dbo.sp_addlinkedserver @server=N'SPHINX_SEARCH', @srvproduct=N'', @provider=N'MSDASQL', @provstr=N'Driver={MySQL ODBC 8.0 ANSI Driver};Server=127.0.0.1;Port=9306,charset=UTF8;User=;Password=;OPTION=3'
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SPHINX', @useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
Run Code Online (Sandbox Code Playgroud)

我得到以下例外:

标题:Microsoft SQL Server Management Studio

与链接服务器的测试连接失败.

附加信息

链接服务器"SPHINX_SEARCH"的OLE DB提供程序"MSDASQL"报告错误.提供商未提供有关错误的任何信息.无法为链接服务器"SPHINX_SEARCH"初始化OLE DB提供程序"MSDASQL"的数据源对象.(Microsoft SQL Server,错误:7399).

从MySQL连接到Sphinx时,通过以下命令工作:

mysql -h 127.0.0.1 -P 9306
Run Code Online (Sandbox Code Playgroud)

有什么建议?


Sphinx版本:3.0.3,SQL Server版本:2014,MySQL版本:5.6

sql-server ssms sphinx linked-server sql-server-2014

6
推荐指数
1
解决办法
310
查看次数

处理多维数据集的有效方法

我正在使用SSAS构建多维多维数据集,我根据日期列创建了分区,并为每天定义了一个分区。源数据大小大于2 TB。

在部署和处理多维数据集时,如果发生错误,则不会保存所有已处理分区,并且它们的状态仍未处理。

搜索了一段时间后,我发现以下文章提到了这一点:

并行(处理选项):用于批处理。此设置导致Analysis Services派生处理任务以在单个事务中并行运行。如果发生故障,则结果是所有更改都将回滚。

搜索之后,我发现了一种替代方法,可以从SSIS包中一步一步处理分区,如以下文章中所述:

但是处理时间增加了400%以上。有没有一种有效的方法可以并行处理分区,而不会在发生错误时丢失所有进度?

sql-server olap ssas ssis sql-server-2014

6
推荐指数
1
解决办法
286
查看次数