标签: sql-server-2014

为什么 SQL Server 2014 数据库项目的 SqlPublish 目标会失败?

我的机器有当前(2014 年 3 月)版本的 SSDT、Visual Studio 2012 Professional 和 SQL Server 2014 Developer。我有一个MyProject.sqlproj针对 SQL Server 2014的 SQL Server 项目(我们称之为)。我尝试了以下操作:

MsBuild.exe MyProject.sqlproj 
            /t:SqlPublish /p:SqlPublishProfilePath=Somewhere.publish.xml
Run Code Online (Sandbox Code Playgroud)

这失败并出现以下错误:

部署错误 部署 72002:内部错误。
类型为 Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider 的数据库平台服务无效。您必须确保服务已加载,或者您必须提供有效数据库平台服务的完整类型名称。

如果我将此项目切换到目标 2012(并指向 2012 实例),则相同的命令会成功运行。我之前问过一个可能相关的问题,那里的答案解决了我的问题,但这不是这里的问题——如果我SqlPackage.exe直接使用,我可以成功发布这个 2014 DACPAC 。

发生了什么,我该如何解决?

msbuild sql-server-2014 sql-server-data-tools

5
推荐指数
1
解决办法
5767
查看次数

SQL Server 2014执行计划创建需要很长时间(旧版本很快)

我在 SQL Server 2014 中遇到一个查询问题。第一次运行该查询时,需要很长时间才能生成执行计划。

奇怪的是,它在 SQL Server 的所有早期版本(2012、2008 R2、2008 等)中都运行良好。它似乎与所涉及的表之一上的唯一索引以及主查询中一定数量的子查询有关。

以下是查询中涉及的表。与原始表格相比,我已经简化了表格很多,但问题仍然存在。请注意 table2 上的唯一约束,这似乎是导致问题的原因。无论是Table2上的唯一约束、唯一索引、甚至主键,结果都是一样的。

IF OBJECT_ID('Table2') IS NOT NULL DROP TABLE [Table2]
IF OBJECT_ID('Table1') IS NOT NULL DROP TABLE [Table1]
CREATE TABLE [dbo].[Table1] ( [ReferencedColumn] [int] NOT NULL PRIMARY KEY)
CREATE TABLE [dbo].[Table2] ( [ReferencedColumn] [int] NOT NULL FOREIGN KEY REFERENCES [Table1] ([ReferencedColumn]), [IntColumn] [int] NOT NULL, [AnotherIntColumn] [int] NULL )
CREATE UNIQUE NONCLUSTERED INDEX [IX_Table2] ON [dbo].[Table2] ([ReferencedColumn], [IntColumn])
Run Code Online (Sandbox Code Playgroud)

如果我随后使用 select 语句中的索引从表中执行一些子查询,则第一次需要很长时间才能完成(在我的测试中超过 30 秒)。

SELECT  (SELECT F2.IntColumn FROM Table2 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2014

5
推荐指数
1
解决办法
1946
查看次数

签名激活过程中的不可信安全上下文

我有一个用于查询链接服务器的服务代理队列的激活过程。我已使用此处找到的方法签署了该程序。但是,我不断在 sql server 日志中看到以下消息:

在队列 'DBName.dbo.TestReceiveQueue' 上运行的激活过程 '[dbo].[TestProc]' 输出以下内容: '访问远程服务器被拒绝,因为当前安全上下文不受信任。

奇怪的是我在同一个数据库中有几个不同的激活程序,由同一个证书签名,也做链接服务器查询,并且工作正常。出于某种原因,这个程序拒绝。

这是一些(主要)重现问题的代码。我已经创建了证书和关联的登录名。

CREATE PROCEDURE TestProc
WITH EXECUTE AS OWNER
AS
BEGIN
    SET NOCOUNT ON;

DECLARE @convHandle UNIQUEIDENTIFIER;
DECLARE @msgTypeName SYSNAME;
DECLARE @status TINYINT;
DECLARE @srvName NVARCHAR(512);
DECLARE @srvConName NVARCHAR(256);
DECLARE @msgTypeValidation AS NCHAR(2);
DECLARE @msgBody NVARCHAR(256);
DECLARE @cmd AS NVARCHAR(50);


RECEIVE TOP(1)
        @convHandle = conversation_handle,
        @msgTypeName =  message_type_name,
        @status = status,
        @srvName = service_name,
        @srvConName = service_contract_name,
        @msgTypeValidation = validation,
        @msgBody = CAST(message_body AS NVARCHAR(256))
        FROM TestReceiveQueue;

    --SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures linked-server service-broker sql-server-2014

5
推荐指数
1
解决办法
950
查看次数

静默 SQL Server 2014 安装失败,临时文件拒绝访问

标题基本上描述了它。

我检查过的东西:

  • 在远程 powershell 会话中验证用户的名称(以确保使用我期望的权限执行操作)
  • 检查了描述文件的权限。预期的用户拥有文件的完全控制权
  • 删除 .tmp 文件并重新启动。安装还是失败
  • RDP 以 Powershell 正在执行的用户身份进入服务器。我打开 PowersheISE 并手动运行静默安装命令。它安装完美

我觉得这可能是 WinRM 与权限交互方式的问题,但这只是一个完整的猜测。我不是真正的 IT 人员,我不确定下一步该去哪里尝试解决这个问题。

下面我包含了正在使用的命令、正在使用的配置文件和详细的错误日志。如果有人有任何建议或想法,请告诉我。

这是我正在使用的命令

'D:\Setup.exe' /ACTION="Install" /FEATURES=SQL,TOOLS,RS /INDICATEPROGRESS=False /INSTANCENAME=MSSQLSERVER /CONFIGURATIONFILE="$configFilePath" /IAcceptSQLServerLicenseTerms  /SAPWD="$saPwd" /Q
Run Code Online (Sandbox Code Playgroud)

这是配置文件

;SQL Server 2014 Configuration File
[OPTIONS]

; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter. 

ACTION="Install"

; Use the /ENU parameter to install the English version of SQL Server on your localized Windows operating system. 

ENU="True"

; Parameter that controls …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

5
推荐指数
1
解决办法
2701
查看次数

SQL Server:从 2008 年到 2014 年:-数据类型日期时间和时间在添加运算符中不兼容。还有其他解决办法吗?

我正在从 SQL Server 2008 迁移到 2014,但出现错误

数据类型 datetime 和 time 在 add 运算符中不兼容。

我想出了将时间转换为 DateTime 的解决方案,但我对许多存储过程和视图进行了更改。

上述问题还有其他解决方案吗?

sql datetime sql-server-2008 sqlmigrations sql-server-2014

5
推荐指数
1
解决办法
4714
查看次数

OpenQuery 和使用动态 SQL

我们正在尝试迁移到 SQL Server 2014。有几种情况我们需要使用 OpenQuery 来返回动态结果。根据输入参数的不同,结果集也会不同。它在 sql 2008R2 中工作,我需要保持它工作,但出现以下错误,我无法解决。

无法确定元数据,因为过程“spTest”中的语句“EXEC (@sQry)”包含动态 SQL。考虑使用WITH RESULT SETS 子句来显式描述结果集。

我已经尝试过结果集未定义,但仍然存在相同的错误。

SELECT * INTO tblTest 
    FROM OPENQUERY(LinkedServer, 'SET FMTONLY OFF  EXEC spTest ''27'', null, null, null, ''%, Employed'' WITH RESULT SETS UNDEFINED')
Run Code Online (Sandbox Code Playgroud)

是否有任何替代方案或解决此问题。
先感谢您。

sql sql-server sql-server-2014

5
推荐指数
1
解决办法
5150
查看次数

根据来自另一列的不同值对值进行计数

我需要根据 orderlineNo 的不同来计算有多少个 orderline。每个 OrderNo 不同,但每个订单的 OrderLineNo 相同。即订单上有 9 行,则订单行编号将从 1 - 9 变化。同样,如果另一个订单上有 3 条订单行,则订单行编号将从 1 - 3 变化

但在 orderlineno 中可能有相同的订单号 - 为此我只想计算一次

例子:

OrderNo        OrderLineNo
987654             1
987654             2
987654             2
987654             3
987654             4
987654             5
987654             6
987654             7
Run Code Online (Sandbox Code Playgroud)

这里的总订单行是 7。有两个订单行为 2,我希望它们只计算一次。

使用 SQL Server 2014 可以吗?

sql sql-server sql-server-2014

5
推荐指数
1
解决办法
8208
查看次数

`sp_executesql` 真的接受 `nvarchar(max)` 参数吗?

摘要:EXEC sp_executesql @code失败的含量比4000更长@code,但@code不截断为4000个Unicode字符。

我正在观察 SQL Server 2014 Developer Edition 上的问题。

更多细节:我的 SQL 安装脚本动态定义了一些代码,因为它应该修改代码以反映环境(只有一次,在安装过程中)。让以下@datasource变量捕获特定环境的结果:

DECLARE @datasource nvarchar(100) = N'testdb.dbo.source_table'
Run Code Online (Sandbox Code Playgroud)

@code变量声明为的nvarchar(max)类型和REPLACE函数用于修改字符串根据需要(即,以取代由所述占位符@datasource内容) -见下面的代码段。

在 Management Studio 中执行sp_executesql@code,显示以下错误:

消息 156,级别 15,状态 1,过程 my_sp,第 86 行
关键字“AS”附近的语法不正确。
消息 102,级别 15,状态 1,过程 my_sp,第 88 行
“WHERE”附近的语法不正确。

下面的代码片段是上述方式失败的代码的精确副本(将被复制)。功能可能并不重要——可能只有代码的长度很重要。的@code内容显然是由截短sp_executesql; 但是,它不应该是(见下文):

-- ... repeated from above
DECLARE @datasource nvarchar(100) = N'testdb.dbo.source_table'

DECLARE @code nvarchar(MAX) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server limits nvarchar sql-server-2014

5
推荐指数
1
解决办法
2724
查看次数

SQL Server 中的阿拉伯语全文搜索

我在 SQL-Server 中的阿拉伯语全文搜索中遇到问题,此链接说我们可以在全文搜索中使用阿拉伯语。

为了进行更多描述,我在包含阿拉伯语和英语文本的专栏之一上启用了全文搜索。

当我对英文输入使用全文搜索时,一切正常,但在阿拉伯语中则不然。

请注意,我还使用其他只有阿拉伯语内容的表测试了我的查询,但我还是一无所获。

使用的查询是这样的:

select * from tbl where freetext(title, '"*???*"')

SELECT * FROM sys.dm_fts_parser('"??????????? ?????? ??????? ?? ???? ?????"', 1025, 0, 0) WHERE special_term <> 'Noise Word' AND display_term IS NOT NULL

sql-server full-text-search sql-server-2012 sql-server-2014

5
推荐指数
1
解决办法
2374
查看次数

为什么我不能使用带有“o*”任何变体的 SQL Contains()?

我有一个表 'Foo' 有两条这样的记录:

int   | nvarchar(4000)
Col0  | Col1
------|--------------
00001 | 'Bar of SNAFU'
00002 | 'Bar SNAFU'
Run Code Online (Sandbox Code Playgroud)

我想返回具有 'of' 分隔符的记录,因此我构建了一个 CONTAINS 子句,如下所示:

SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar of*"')

0 Rows Returned
Run Code Online (Sandbox Code Playgroud)

如果我将它换成 LIKE 子句,它就可以正常工作:

SELECT *
FROM Foo
WHERE Col1 LIKE 'Bar of%'

1 Row Returned
Run Code Online (Sandbox Code Playgroud)

如果我从 CONTAINS 子句中的搜索词中删除第二个单词,它会按预期返回两行:

SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar *"')

2 Rows Returned
Run Code Online (Sandbox Code Playgroud)

只有当我在 CONTAINS 子句中包含“o*”的任何变体时才会出现问题。我可以在 CONTAINS 子句中使用多个单词并检索正确的行(通过单独的查询验证),因此空格不是问题,其他字母似乎也不会出现。我尝试重新格式化 CONTAINS 以使用 AND 关键字(“Bar*”AND“of*”)连接各个术语,但得到了相同的结果。我只需要返回一行,并且表相当大(数十万行),所以我想利用 CONTAINS 子句,而不是切换到 LIKE。

sql sql-server contains sql-server-2014

5
推荐指数
0
解决办法
164
查看次数