标签: sql-server-2012

从链接服务器读取的数据在生产服务器上返回不同的数据类型

我有一个 SQL Server 从 SP 内的链接 Oracle 服务器获取数据。

在我的开发服务器上,EF6 坚持 SP 正在返回double其中一列的数据类型,但在 prod 中,它坚持同一列是decimal.

SQL Server 版本略有不同:

  • 产品:11.0.5582.0
  • 开发:11.0.5613.0

链接服务器的配置方式没有(明显的)差异(即我比较了 SSMS 中的连接属性)。

作为一个新功能,生产数据库在数据库中只有很少(零,偶数)行,而开发服务器有很多。我有一种感觉可能是相关的,因为我记得必须在开发过程中更改数据类型(尽管当时我并没有考虑太多)。

这里可能有什么问题?

oracle entity-framework linked-server sql-server-2012

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

如果 1 和 'female' 为 0,我试图用 'male' 表示性别字段的值

需要转换的性别字段的数据类型为位。

我使用了这个语法:

Select case when CAST([GenderIsMale] AS bit)=1 then 'Male' 
when CAST([GenderIsMale] AS bit)=0 then 'Female' 
else  CAST([GenderIsMale] AS bit) 
end
Run Code Online (Sandbox Code Playgroud)

返回错误:

将 varchar 值 'Male' 转换为数据类型 bit 时转换失败。

sql-server sql-server-2012

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

为什么在 SQL Server 2012 数据库中存储 XML 架构?

在 SQL Server 数据库中存储和/或使用 XML 架构的真实生产环境示例是什么?

我正在按照 Microsoft 70-461 考试目标努力工作。我已经完成了 Microsoft 在https://technet.microsoft.com/en-us/library/ms176009(v=sql.110).aspx 上的数据库中创建和存储 XML 模式的 演练

我还没有在应用程序将访问存储在数据库中的 XML 模式的数据库环境中工作。在生产 SQL Server 数据库中创建和存储 XML 架构的真实用例是什么?

xml sql-server-2012

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

将前导零添加到小于 7 位的整数并忽略任何 7+

我有一个查询,它几乎做我想做的。它正在添加前导零,但是当涉及到 7+ 长的东西时,它会将所有东西都变成 7 位数字。

Select RIGHT(rtrim('0000000' + cast(column as nvarchar)), 7) from table
Run Code Online (Sandbox Code Playgroud)

我只是觉得我的大脑不工作,我无法弄清楚这一点。谁能帮我这个?

例子:

324 -> 0000324
2232 -> 0002232
3324124 -> 3324124

我所要做的就是为小于 7 的任何内容添加 0。

列是nvarchar

sql-server sql-server-2012 number-formatting

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

如何诊断 try_parse 非常慢?

我有一个非常大的查询,它的运行速度比我想象的要慢,但是对查询执行计划的深入研究并没有帮助揭示这种缓慢。最终我缩小了范围:try_parse是罪魁祸首!

正常查询:

SELECT CloseDate
FROM MyTable

(4959 row(s) affected)

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 17 ms.
Run Code Online (Sandbox Code Playgroud)

使用 try_parse:

SELECT try_parse(CloseDate as datetime using 'en-us')
FROM MyTable

(4959 row(s) affected)

SQL Server Execution Times:
   CPU time = 719 ms,  elapsed time = 718 ms.
Run Code Online (Sandbox Code Playgroud)

后一种情况下的执行计划看起来很无辜:

在此处输入图片说明

有没有什么方法可以让我以后更容易地发现罪魁祸首?缓慢的实际来源完全隐藏在视线之外。

performance sql-server execution-plan sql-server-2012

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

数据库基线

我是一名 SQL Server 意外 DBA,他继承了一些数据库,并试图设置基线阈值来监视这些服务器。

有谁知道解决这个问题的好方法?

我希望做的事情如下:我想在每个 SQL Server 实例上捕获不同的指标,这样当我们遇到问题时,我总是可以回到基线并查看它的变化之处。我想以此作为故障排除的起点。

sql-server sql-server-2012

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

获取最大序列号 根据其相应金额的总和

我有一个数据表如下:

s_no  amount
1      500
2      500
3      500
4      500
5      500
Run Code Online (Sandbox Code Playgroud)

我需要一个查询来根据 sum(amount) 找到 max(s_no) 例如,当 sum(amount)<=1600 时,我需要 4 作为结果。我可以通过使用游标获得所需的输出,但如果我可以使用查询会更容易。. 我尝试了如下查询:

SELECT MAX(s_no) from table HAVING SUM(amount)<=1600
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我将不胜感激任何形式的帮助。谢谢你。

sql-server-2008 sql-server sql-server-2012

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

将 SQL Server 从 2012 (sp3) 升级到 2014 时出错

我正在尝试将 MS SQL Server 2012 (sp3) 升级到 SQL Server 2014。

在升级结束时,几个组件失败并显示错误,

“错误详细信息:安装 SQL Server 数据库引擎服务实例功能时出错,无法创建新文件夹 'H:\MSSQL11_MSSQLSERVER_Backup_Dir'。指定的路径无效(例如,它位于未映射的驱动器上)。错误代码:0x84CF000E”

此服务器没有 H:\ 驱动器。据我所知,它从来没有H盘。我该如何纠正?

sql-server sql-server-2012 sql-server-2014

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

刷新对表的 DDL 更改

我正在尝试创建巨型脚本,通过添加/删除/修改现有数据库的列来更新一堆表。困扰我的一个问题是,每当我在一个语句的表中添加新列并尝试在另一条语句中引用它时,它都会失败并显示关于无效列 xxx 的错误。

以下是我用来重现此问题的伪代码,

--CREATE TABLE testTable (u_id int, u_name varchar(10))
--INSERT INTO testTable VALUES (1,'11')
--INSERT INTO testTable VALUES (2,'12')
--INSERT INTO testTable VALUES (3,'13')
--INSERT INTO testTable VALUES (4,'14')
--INSERT INTO testTable VALUES (5,'15')

BEGIN
ALTER table testTable ADD u_add varchar(10)
END

BEGIN
CREATE TABLE tmp_xx_xx_testTable (u_id int, u_name varchar(10), u_add varchar(10))

INSERT INTO dbo.tmp_xx_xx_testTable VALUES (6,'16','DDD'  )

INSERT INTO tmp_xx_xx_testTable (u_id,u_name,u_add) 
SELECT u_id,u_name,u_add FROM TestTable

drop TABLE TestTable

EXECUTE sp_rename
                N'[dbo].[tmp_xx_xx_testTable]',
                N'TestTable';
END

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

sql-server t-sql sql-server-2012

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

无法从 SQL SERVER 2012 中删除域登录

我们正在尝试清理我们 AlwaysOn 集群之一上的一些旧帐户。

这个特定的帐户拒绝玩好并允许自己被删除。

USE [master]
GO
DROP LOGIN [PROD\dba007]
GO
Run Code Online (Sandbox Code Playgroud)

错误:

Msg 15173, Level 16, State 1, Line 4
Server principal 'PROD\dba007' has granted one or more permission(s). Revoke the permission(s) before dropping the server principal.
Run Code Online (Sandbox Code Playgroud)

它抱怨的权限是对 HADR_ENDPOINT 的连接权限

Select perm.* from sys.server_permissions  perm
INNER JOIN sys.server_principals prin ON perm.grantor_principal_id = prin.principal_id
where prin.name = N'PROD\dba007'

class   class_desc  type    permission_name state   state_desc
105     ENDPOINT    CO      CONNECT         G       GRANT
Run Code Online (Sandbox Code Playgroud)

现在下一个合乎逻辑的事情是撤销连接权限。

USE master;
REVOKE CONNECT ON ENDPOINT ::HADR_endpoint from [PROD\dba007]
Run Code Online (Sandbox Code Playgroud)

但这会产生消息 …

security sql-server permissions sql-server-2012

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