标签: sql-server-2008

Oracle 针对 SQL Server 数据库的查询给出不一致的结果

我们有多个 Oracle 11.2.0.2 数据库,其中 og4odbc 数据库链接到 SQL Server 2008 数据库。SQL Server 数据库中的特定表有两个 Varchar(36) 列。以下语句返回 1292 行:

select "id", "folder_id" from dbo.mediasite_presentation@ms;
Run Code Online (Sandbox Code Playgroud)

查询第一列中的特定值会返回一行:

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52';
id                                   folder_id
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 54aa9b6e-1c55-4de5-a06f-033d8b19fff0
Run Code Online (Sandbox Code Playgroud)

但是查询第二列中的特定值不返回任何行:

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "folder_id"='54aa9b6e-1c55-4de5-a06f-033d8b19fff0';
no rows selected
Run Code Online (Sandbox Code Playgroud)

使用有效的 where 子句并将每个字段包装在 to_char 中会返回以下有趣的结果:

select to_char("id"), to_char("folder_id") from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52';
TO_CHAR("ID")                        TO_CHAR("FOLDER_ID")
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 ??????????????????
Run Code Online (Sandbox Code Playgroud)

有趣的是,我只需添加一个 rownum 子句就可以产生相同的结果:

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52' and rownum<=1;

id                                   folder_id
------------------------------------ ------------------ …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 oracle sql-server query oracle-11g-r2

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

SQL 2008:使用 DTS 包打开 excel 文件时出现代理作业错误

我有一个安装了 Excel 的 SQL 2008 服务器 (SQL2008S1)。我不得不将数据库和 DTS 包从 SQL 2000 服务器 (SQL2000S2) 迁移到该服务器。1 DTS 包试图访问远程服务器上的 Excel 文件,如 \\SQL2000S2\C$\directory\someExcelFile.xls。SQL2008S1 上的 SQL 服务器和代理都在同一服务帐户 (Domain\SQL2008S1_service) 下运行,并且对 \\SQL2000S2\C$\directory 具有完全权限。我什至授予 Domain\SQL2008S1$(机器名称)对 \\SQL2000S2\C$\directory\ 的完全访问权限

当我在 SQL2008S1 上打开 DTS 包并手动执行它时,它运行得非常好。但是当我将其安排为作业时,作业报告:

以用户身份执行:Domain\SQL2008S1_service。...p_DTSExecutePackageTask_5 DTSRun OnError: DTSStep_DTSExecutePackageTask_5, Error = -2147467259 (80004005) 错误字符串:DTSStep_DTSExecuteSQLTask_2:Microsoft Jet 数据库引擎无法打开文件 '\\SQL2000S2\C$\ExcelFile.xls\some. 它已被其他用户以独占方式打开,或者您需要获得查看其数据的权限。

我 100% 确定文件未打开,并且我认为我已授予 SQL 代理/SQL 服务帐户足够的权限。

请问有什么帮助吗?

sql-server-2008 etl

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

SQL Server 无通配符 LIKE 优化

在使用 SQL Server 2008 R2 作为后端的 Web 应用程序中,我有几个字段,如果存在,将 WHERE 子句添加到查询中。

如果我将所有查询生成为 like 子句,例如:

AND Uri LIKE @Uri

如果Uri包含 no %,优化器是否足够聪明以将其视为WHERE Uri = @Uri或我必须处理该应用程序端?

我意识到优化器总有一天会从我手下变出来,这有点草率,但我仍然很好奇。

示例计划

我做了一个一次性测试,似乎表明>= ... <=条件可能是这种情况:

在此处输入图片说明

对比 凡条款:

在此处输入图片说明

因此,它们都在该人为索引上触发索引搜索。是>= ... <==在这种情况下,并且将这个总是发生?

sql-server-2008 sql-server optimization

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

SQL Server 2008/2012 如何设置全文目录位置

我想将我的 SQL Server 2005 数据库升级到 SQL Server 2012。在 SQL Server 2005 中,您可以在创建全文目录时设置它的位置。但是在 SQL Server 2012(以及我从在线聊天中推断出的 SQL Server 2008)中,您无法指定位置。

在 SQL Server 2005 中,能够设置此位置很重要,因为出于性能原因,我们将目录放在单独的磁盘上。我知道全文引擎从 SQL Server 2008 开始发生了变化,但我找不到有关目录物理创建位置的信息,以及是否将它们放在单独的磁盘上仍然是最佳做法。

如何在 SQL Server 2008/2012 中设置目录位置?或者不再需要遵循将它们存储在单独磁盘上的最佳实践?

sql-server-2008 full-text-search sql-server-2012

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

从 SQL Server 2000 到 SQL Server 2008 的死锁错误

将数据从 SQL Server 2000 迁移到 SQL Server 2008 后,当我在表中执行任何查找数据库中更多行的事务时,这给了我错误。

 Transaction (Process ID 59) was deadlocked on lock resources with
 another process and has been chosen as the deadlock victim. 
 Rerun the transaction.
Run Code Online (Sandbox Code Playgroud)

表上有 3 个触发器(插入、更新、删除)。我怎么解决这个问题?

trigger sql-server-2008 deadlock transaction

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

为什么 OUTPUT INTO 子句的目标不能是视图?

这是我的声明:

DELETE FROM table1 OUTPUT deleted.col1,deleted.col2 INTO view1;

它给了我这个错误:

OUTPUT INTO 子句的目标“view1”不能是视图或公用表表达式。

该视图简单且可更新。为什么我不能使用 OUTPUT 子句插入可更新视图?

sql-server-2008 sql-server t-sql

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

如何使用链接服务器执行可怕的双跳?

情况:我在 SERVER3 上有 SERVER1、SERVER2、ACCESSDB。

我已成功创建了从 SERVER1 到 SERVER3 的 ACCESSDB 的链接服务器连接。

我希望能够从 SERVER2(又名双跳)访问 SERVER1 上的链接服务器。

当我登录到 SERVER2 时,我得到了很好的 ol - 当我测试连接时“没有权限”问题。我检查了 SERVER3 日志,它说传入的连接是匿名的。我需要能够将一些(任何)凭据从 SERVER2 传递给 SERVER3。

不,我不能使用 SQL 帐户。我必须使用 Windows 身份验证。

是的,我需要使用 KERBEROS 并设置 SPN。这就是我的问题所在。如何正确设置 KERBEROS 和委派?

我希望能够跑步

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
Run Code Online (Sandbox Code Playgroud)

从 SERVER2 并让它返回“KERBEROS”而不是“NTLM”。

我需要运行哪些特定命令才能正确设置 KERBEROS/SPN?我如何创建这个“链”?

仅供参考 - 两个实例都是 SQL2008 R2 标准 (x64) 上的 NAMED 实例。

sql-server-2008 ms-access

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

设置冗余 Sql Server 2008 配置,同时保持高性能和最小停机时间

我们遇到了一种情况,我们要迁移到新的托管设施并尝试配置我们的新数据库环境。然而,我们都不是正式的 DBA,所以我们所做的很多事情都是在尝试做出明智决定的同时猜测和阅读文章。

首先,我们目前是一家小公司,一个月要处理几十万条记录(其中大约 1/2 有图像数据)。我们正在快速发展,在发生严重故障(SAN 阵列完全瘫痪,我们在 12 小时内丢失所有内容)之后,我们正在迁移到具有更好灾难恢复能力的新托管设施。

新的托管设施将在 50 磁盘 SAN 上拥有我们的数据库。每分钟都会拍摄一张快照。如果 SAN 出现故障,快照会加载到另一个 SAN,并且服务器会自动在新的 SAN 上启动。停机时间为几分钟。

除此之外,我们还需要一个冗余的数据库设置。我们讨论了在 2 个单独的 SAN 上使用 DFS 的 Sql Server 集群,但这违反了我们必须拥有的 PCI 合规性。因此,我认为在 SAN 发生故障时,集群不会比托管公司的内置快照系统为我们带来更多的冗余。

我们正在讨论的另一个选项是使用镜像。但是,我们阅读的信息使我们相信,使用见证进行镜像会对性能影响太大。提出的一种选择是使用“Safety Off”镜像,直到我们想要执行维护,然后启动见证,一次关闭一台服务器并执行维护。然后,完成后,关闭见证服务器。这似乎两全其美,但也令人头疼。

那么现在最大的问题是 - 我们托管公司的快照系统将我们的停机时间缩短到几分钟,建议使用什么配置来提供高可用性和最佳性能?

performance sql-server-2008 clustering mirroring high-availability

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

为什么我的 UPDATE 语句没有完成?

运行 SQL Server 2008;Mgmt Studio 2008。我正在处理我们为 MS CRM 4.0 实施创建的 MS SQL 作业。对于熟悉 CRM 的任何人来说,这项工作每晚清除 aSyncOperationBase 表以节省数据库大小。这是工作代码:

    Begin Transaction T1

Declare @p30Days as DateTime
Declare @p3Years as DateTime

Set @p30Days = DateAdd(d, -30, GetDate())
Set @p3Years = DateAdd(d, -1095, GetDate())

update AsyncOperationBase 
set deletionstatecode=2    
where deletionstatecode = 0 and 
statecode = 3 and 
completedon is not null and 
completedon < @p30Days   
and OperationType <> 10

update AsyncOperationBase 
set deletionstatecode=2    
where deletionstatecode = 0 and 
statecode = 3 and 
completedon is …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 locking blocking

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

MS SQL 2008 R2 中的 CONTAINS 函数

我尝试以下 SQL 查询:

SELECT FirstName, SecondName FROM Persons WHERE CONTAINS(FirstName, 'Mat')
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

不能在表或索引视图 'Person' 上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引。

我需要索引FirstName列吗?怎么了 ?

sql-server-2008

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