标签: sql-server-2014

带有HierarchyID的CTE突然导致解析错误

所以我在我的数据库中有这个自引用表Nodes,用于存储组织的树结构:

[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NULL,
[ParentId] [int] NULL,
(+ other metadata columns)
Run Code Online (Sandbox Code Playgroud)

从中我使用HIERARCHYID来管理基于访问级别等的查询.我为此编写了一个表值函数tvf_OrgNodes,很久以前,在SQL Server 2008到2014年进行了测试和工作,从那以后它一直保持不变,因为它做得很好.然而,现在已经发生了一些变化,因为从路径nvarchars("/ 2/10/8 /")解析HIERARCHYID会导致以下错误,在Google上只匹配4次点击(!):

Msg 6522, Level 16, State 2, Line 26
A .NET Framework error occurred during execution of user-defined routine or aggregate "hierarchyid": 
Microsoft.SqlServer.Types.HierarchyIdException: 24000: SqlHierarchyId operation failed because HierarchyId object was constructed from an invalid binary string.
Run Code Online (Sandbox Code Playgroud)

当改变函数只返回NVARCHAR而不是实际的HIERARCHYID时,路径都看起来很好,从/根开始,接着是/2/等等.简单的选择HIERARCHYID::Parse('path')也可以正常工作.我实际上通过将路径保持为字符串一直工作,直到INSERT进入函数结果,解析那里的路径.但是,当我尝试将重新获得的数据插入到相同模式的表中时,我得到了同样的错误.

所以问题是,这是一个错误,还是有人知道使用HIERARCHYIDs的任何(新的?)陷阱< - >可能导致这种情况的路径字符串?我不知道整个二进制字符串的想法来自哪里.

这是TVF的代码:

CREATE FUNCTION [dbo].[tvf_OrgNodes] () 
RETURNS @OrgNodes TABLE …
Run Code Online (Sandbox Code Playgroud)

common-table-expression hierarchyid sql-server-2014

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

数据库“无法打开物理文件”的SSMS删除失败

试图在其他地方找不到运气。

我正在尝试删除磁盘上不再存在的数据库,但仍显示在SSMS 2014的对象资源管理器中

那么,如何从对象资源管理器中“清除它们”呢?

我需要手动将它们从sys.master_files中删除吗?

例外是:

    Drop failed for Database 'aspnet-Blawblaw-20141027015559'.  (Microsoft.SqlServer.Smo)

    ------------------------------
    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=12.0.2000.8+((SQL14_RTM).140220-1752)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Drop+Database&LinkId=20476

    ------------------------------
    Program Location:

       at Microsoft.SqlServer.Management.Smo.SqlSmoObject.DropImpl()
       at Microsoft.SqlServer.Management.Smo.Database.Drop()
       at Microsoft.SqlServer.Management.SqlManagerUI.DropObjects.DoDropObject(Int32 objectRowIndex)
       at Microsoft.SqlServer.Management.SqlManagerUI.DropObjects.DropAllObjects(Boolean stopOnError)

    ===================================

    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------
    Program Location:

       at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
       at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType)
       at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries)
       at Microsoft.SqlServer.Management.Smo.SqlSmoObject.ExecuteNonQuery(StringCollection queries, Boolean includeDbContext)
       at Microsoft.SqlServer.Management.Smo.SqlSmoObject.DropImplWorker(Urn& urn)
       at Microsoft.SqlServer.Management.Smo.SqlSmoObject.DropImpl()

    ===================================

    Unable to open the physical file "C:\Projects\BlawBlaw\BlawBlaw\App_Data\aspnet-BlawBlaw-20141027015559.mdf". Operating system error 3: …
Run Code Online (Sandbox Code Playgroud)

ssms drop-database sql-server-2014

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

SAS libname语法,通过ODBC连接到SQL Server

我用谷歌搜索了几天,但是无法正常工作.

我正在使用SQL 2014和adventureworks数据库.

我有SAS 9.3.

我尝试了不同的ODBC设置,如设置默认数据库,使用Windows登录或SQL登录.不同的司机.仍然没有,使用完整和noprompt:

libname mylib odbc complete='TrustedConnection=True;DSN=test2;SERVER=MYSERVER\SQLEXPRESS;DATABASE=AdventureWorks2012;'stringdates=yes;
proc print data=mylib.Person;
Run Code Online (Sandbox Code Playgroud)

错误信息:

注意:Libref MYLIB已成功分配如下:引擎:ODBC物理名称:test2

注49-169:在未来的SAS版本中,带引号的字符串后标识符的含义可能会更改.建议在带引号的字符串和后续标识符之间插入空格.

注意:由于错误,SAS系统停止处理此步骤.注意:使用PROCEDURE PRINT(总处理时间):实时5.48秒cpu时间0.34秒

700 proc打印数据= mylib.Person; 错误:文件MYLIB.Person.DATA不存在

我已尝试过Person.Person并且也在连接字符串中使用schema=Person.

但是,如果我使用以下它可以工作.我把默认数据库放在ODBC中:

proc sql;
   connect to odbc as mycon
   (required = "dsn=awlt32;uid=sa;password=mypassword");
   select *
   from connection to mycon
      (select *
      from Person.Person);

disconnect from mycon;
quit;
Run Code Online (Sandbox Code Playgroud)

我知道这是一个非常简单的问题,但无论我找到什么样的代码,我似乎都无法使它工作.提前致谢.

sql sas sql-server-2014

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

使用 T-SQL 消除前 10% 和后 10% 值进行平均计算

我需要计算正在运行的存储过程之一的平均持续时间。例如SP的持续时间(以秒为单位)为:1,30,2,5,2,15,35,7,3,4,2,1,2,40

我必须消除前 10% 的调用(快速调用)和后 10% 的调用(慢速调用)并计算其余调用的平均值。

由于必须定期在庞大的数据集上完成此操作,是否有更好的方法可以最大限度地减少性能损失?

我知道的方法是:

使用以下查询消除前 10% 的记录,该查询会产生两个值 (1,1)

SELECT TOP 10 PERCENT WITH TIES value FROM #t order by value asc
Run Code Online (Sandbox Code Playgroud)

底部 10% 给出 (35,40),

SELECT TOP 10 PERCENT WITH TIES value FROM #t order by value desc
Run Code Online (Sandbox Code Playgroud)

消除这些值(1、1、35 和 40)后,平均值将为 7。

t-sql sql-server percentile sql-server-2014

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

编写服务器属性和数据库属性的脚本

微软SQL 2014

如果可能的话,有人可以提供tsql来从服务器属性和数据库属性页面中提取设置吗?

数据库属性 服务器属性

谢谢

t-sql sql-server sql-server-2014

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

MS SQL 查询有时需要多花 500 毫秒

我遇到一些查询有时比从服务器返回结果所需的时间长 500 毫秒的情况。准确地说:正常响应时间为 5-6 毫秒,与服务器的 ping 时间相同。SQL 探查器的正常查询持续时间约为 1 毫秒。有时响应时间会上升到500ms左右。从来没有 300 或 400 毫秒,总是非常接近 500 毫秒。SQL Profiler 报告的实际查询持续时间仍然只有 1 毫秒左右。我使用 Wireshark 分析了网络流量,发现当响应时间为 500 毫秒时,我几乎立即收到请求包的 ACK(在 5-6 毫秒 ping 时间内)。这一定意味着服务器快速接收请求并且这不是与网络相关的问题,对吧?

因此,由于某种原因,SQL 服务器收到请求,但在执行查询之前会等待,或者执行 SQL 探查器的“持续时间”中未包含的其他操作。看起来很奇怪,它总是在 500 毫秒左右 - 这会给任何人带来任何关联吗?PS:我也觉得SQL Server这么快发送ACK可能有点奇怪?通常我希望它等待更长的时间,事实上,当响应时间很短时,就不会发送 ACK(只是搭载在响应包上)。

编辑:我正在循环测试这个。大多数响应速度很快,只有一小部分有这种延迟。延误通常是分组的。这是一个生产服务器,我认为它可能与同时发生的其他请求有关,但令我困惑的是为什么它总是有 500 毫秒的延迟,以及为什么它没有包含在分析器的“持续时间”列中。

sql-server sql-server-profiler sql-server-2014

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

SQL Server 2014:对 xp_cmdshell 代理帐户使用 gMSA?

我们正在运行 SQL Server 2014。我们希望使用 gMSA 作为 xp_cmdshell 的代理帐户。

我尝试运行以下命令:

EXEC sys.sp_xp_cmdshell_proxy_account 'gmsaNameGoesHere$', ''
Run Code Online (Sandbox Code Playgroud)

但是,它需要密码。

我尝试运行以下命令:

CREATE CREDENTIAL ##xp_cmdshell_proxy_account## WITH IDENTITY = 'gmsaNameGoesHere$'
Run Code Online (Sandbox Code Playgroud)

它运行了!但是,当用户尝试通过代理帐户运行 xp_cmdshell 时,他们会被告知:

消息 15153,级别 16,状态 1,过程 xp_cmdshell,第 3 行 xp_cmdshell 代理帐户信息无法检索或无效。验证“##xp_cmdshell_proxy_account##”凭据是否存在并包含有效信息。

是否可以在 SQL Server 2014 中使用 gMSA 作为 xp_cmdshell 的代理帐户?如果是这样,如何将其设置为代理帐户?

谢谢!

sql sql-server xp-cmdshell sql-server-2014

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

将 CSV 导入 SQL Server 时无法在输入文件中找到模式

我正在尝试将一些非常简单的数据从csv文件导入到我的 SQL Server 2014 中。

csv文件中,我只有一列包含数字数据。

我正在使用 SQL Server Management Studio 17.6,连接到我的数据库,然后使用任务Import Flat File功能。

这是我选择文件并单击“下一步”时看到的错误: 在此输入图像描述

知道问题是什么以及如何解决它吗?

更新:

与提供实际文件不太一样,但这是文件的屏幕截图。它包含电话号码。我混淆了实际数字,这样我们就不会危害任何人的隐私。

在此输入图像描述

sql-server csv excel sql-server-2014

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

从 DataFrame 插入时获取身份密钥

假设我在 SQL Server 中有下表:

CREATE TABLE Users
(
     UserID          int IDENTITY(1,1) PRIMARY KEY
,    UserName        varchar(50)
,    InsertDate      datetime2 DEFAULT GETDATE()
)
Run Code Online (Sandbox Code Playgroud)

在Python中,我想从DataFrame插入到这个表中并取回UserID我刚刚插入的行

import numpy as np
import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine(...)
df = pd.DataFrame({'UserName': ['Alice', 'Bob']})
df.to_sql('Users', engine, if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)

数据正在进入数据库。但是我怎样才能取回UserID我刚刚插入的行呢?我考虑编写一个包装函数,首先插入到临时表中,然后使用 T-SQL 来操作数据并返回我想要的内容。但有没有更简单的方法呢?

注意:无论如何我都无法修改表的架构。我只能在数据库中创建临时表。

dataframe pandas sql-server-2014

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

为什么在数据库中自动创建临时表

我将 Entity Framework Core 2.1 与 .NET Core 2.0 结合使用。我正在使用代码优先的方法。我看到有时在数据库中创建临时表。

这是问题的屏幕截图。

在此输入图像描述

Odds 是我使用 EFCore 创建的表,但是当应用程序连续运行一段时间后,这些临时表就会被创建,我也可以在这些表中看到一些数据。

任何人都可以帮助我吗?我该如何解决这个问题?

sql-server ef-code-first sql-server-2014 .net-core ef-core-2.1

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