相关疑难解决方法(0)

SQL Server 2005 与 SQL Server 2012 上的按错误排序

我有一个由实体框架生成的查询,它在 SQL Server 2005 数据库 (Microsoft SQL Server 2005 - 9.00.5000.00 (X64)) 上返回错误结果,但在 SQL Server 2012 (Microsoft SQL Server 2012 - 11.0.2100.60) 上运行良好。

这是查询:

SELECT 
[Project2].[tableAid] AS [id],     
[Project2].[rank1] AS [rank]   
FROM ( SELECT 
    [Extent1].[id] AS [id], 
    [Extent2].[rank] AS [rank],        
    [Extent4].[rank] AS [rank1]      
    FROM    [dbo].[tableA] AS [Extent1]
    LEFT OUTER JOIN [dbo].[tableB] AS [Extent2] ON ([Extent1].[tableAid] = [Extent2].[tableAid]) AND (896 = [Extent2].[tableBid])
    INNER JOIN [dbo].[tableC] AS [Extent4] ON [Extent1].[tableCid] = [Extent4].[tableCid]        
)  AS [Project2]
ORDER BY [Project2].[rank] DESC
Run Code Online (Sandbox Code Playgroud)

我已经简化了它,但模型是:

TableA
int …
Run Code Online (Sandbox Code Playgroud)

sql-server order-by

7
推荐指数
1
解决办法
1180
查看次数

如何在不使用数据透视表和逆透视表的情况下从 SQL Server 2008 R2 中的行获取中值

创建表脚本

create table temp 
(
    id int identity(1,1),
    a decimal(6,2),
    b decimal(6,2),
    c decimal(6,2),
    d decimal(6,2),
    e decimal(6,2),
    f decimal(6,2),
    g decimal(6,2),
    h decimal(6,2),
    i decimal(6,2),
    j decimal(6,2),
    k decimal(6,2),
    l decimal(6,2),
    m decimal(6,2),
    n decimal(6,2),
    o decimal(6,2),
    p decimal(6,2),
    q decimal(6,2),
    r decimal(6,2),
    s decimal(6,2),
    t decimal(6,2),
    u decimal(6,2)
)
Run Code Online (Sandbox Code Playgroud)

插入脚本

insert into temp
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
values
    (1,5,6,7,8,2,6,3,4,5,2,1,6,5,7,8,2,7,6,2,8)

insert into temp
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
values
    (1,5,6,7,8,2,2,3,2,4,2,1,4,5,9,8,2,7,6,2,8)
Run Code Online (Sandbox Code Playgroud)

预期结果

Median
======
first row  - 5.00
second row - 4.00 
Run Code Online (Sandbox Code Playgroud)

非工作解决方案

我尝试了以下查询,该查询在 SQL Server 2014 …

sql-server sql-server-2008-r2 compatibility-level

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

如何查找用户有权访问的表和视图?

我们有一个 SQL Server 2008 数据库,并且限制了所有表和视图远离特定用户 ID。多年来,我们根据用户需要一次授予一个表和视图。

我们必须这样做,因为供应商提供public了开箱即用的角色的读/写访问权限,因此我们必须为此用户创建一个角色,删除所有访问权限并仅授予他们需要的权限。

今天我们将创建一个仅包含这些表和视图的复制数据库,以便用户可以在不降低生产系统的情况下运行报告。问题是我不确定该用户可以访问哪些表和视图,因为多年来许多人一次授予访问权限。

是否有查询来检查此用户的访问权限?

PS 我是一名应用程序开发人员,所以请根据需要随意解释这一点。


编辑 - 最初如何创建角色和访问权限


------------------------------
-- CREATE ROLE db_finrep_deny
------------------------------

DECLARE @RoleName sysname
set @RoleName = N'db_finrep_deny'
IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = @RoleName AND type = 'R')
Begin
    DECLARE @RoleMemberName sysname
    DECLARE Member_Cursor CURSOR FOR
    select [name]
    from sys.database_principals 
    where principal_id in ( 
        select member_principal_id 
        from sys.database_role_members 
        where role_principal_id in (
            select principal_id
            FROM sys.database_principals where [name] = @RoleName  AND type = 'R' )) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 access-control sql-server-2008-r2 users

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

还原到较新的 SQL Server 后的统计维护

将 SQL Server 2012 备份还原到 SQL Server 2014 实例并更新兼容性级别时,理想(或必要)的调用顺序是什么?

-- Update Statistics for all tables
EXEC sp_MSforEachtable 'Update Statistics ? with FULLSCAN';

-- Update page and row counts in catalogviews
DBCC UPDATEUSAGE('MY_DATABASE') ;

-- Change DB Compatibility level
EXEC sp_dbcmptlevel 'MY_DATABASE', '120'; 
Run Code Online (Sandbox Code Playgroud)

我不确定数据库兼容性级别是否会影响统计数据或简化服务器上​​的引擎。如果数据库兼容性级别影响统计信息,则应在更新统计信息之前完成。也不清楚是否仍然推荐 UPDATEUSAGE 以及是否也应该在更新统计信息之前。

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

4
推荐指数
1
解决办法
602
查看次数

将数据库从 SQL Server 2005 升级到 2012 发现语法错误

我最近从 SQL Server 2005 升级到 2012。但是在验证过程中,发现了一个错误。

某个触发器的编码如下:

CREATE TRIGGER [dbo].[trigger] on [dbo].[foo]
FOR UPDATE, UPDATE
AS
    UPDATE foobar
    SET datetime = GetDate()
    FROM bar
    WHERE foobar.id = bar.id
GO
Run Code Online (Sandbox Code Playgroud)

我可以在 SQL Server 2005 上安全地执行这个(奇怪的)。

但是,在 SQL Server 2012 上,它会引发(我所期望的)语法错误。

语法错误:触发器声明中操作“UPDATE”的重复规范。

为什么这不会在 SQL Server 2005 上引发语法错误?我在这方面的 google-fu 失败了。

为什么这似乎适用于 SQL Server 2005?

trigger sql-server-2005 syntax sql-server-2012

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

将 SQL Server 2000 数据库导出到 Server 2012

我有一个运行 Windows Server 2000 的生产环境和一个使用 SQL Server 2012 的开发环境。我需要更新数据库并使用 .ASP 实现一些新功能。有没有办法导出2000的数据库,然后导入到2012?我能找到的只是这个关于将数据库转移到 2008 年的 MS 支持文档。

http://support.microsoft.com/kb/962355

sql-server export sql-server-2012

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

在选择中包含表函数中的字段

我在 SQL Server 2008 R2 上运行这个查询:

SELECT 
   orr.Rate, orr.ID, orr.UserKey, fn.NetRate 
FROM 
   OngoingRate orr 
CROSS APPLY 
   dbo.GetRateNetView(orr.UserKey) as fn
WHERE 
   orr.UserKey = 5
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

'.' 附近的语法不正确。

请帮忙

sql-server t-sql sql-server-2008-r2

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

将数据库从 SQL Server 2000 升级到 SQL Server 2014

我在 SQL Server 2008 R2 中有数据库。我备份了这个数据库并在 SQL Server 2014 服务器上恢复了它。但是,某些数据库查询看起来与新版本不兼容。

例如,*=运算符在 SQL Server 2014 中引发错误。

我不想更改出现问题的每个查询。有没有办法升级旧版本的 SQL Server 备份以使用新版本的数据库?

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

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

寻找一个片段,说明在 where 子句中连接的模糊结果

不久前(大约 2004 年),我在一个团队中担任后端开发人员,每个人都使用 where 子句加入。作为使用内/外连接的支持者,我向他们展示了一个 where 子句连接的示例,该示例说明了它如何根据数据产生不明确的结果,以及外连接如何避免该问题。

我必须做同样的演示,但再也找不到那个片段了。它在我的文件档案中的某个地方,不幸的是我无权访问。有没有人有一个方便的例子?

join sql-server

0
推荐指数
1
解决办法
69
查看次数