标签: sql-server-2008-r2

SQLCLR使用错误版本的.NET Framework

在最近重新启动我们的开发服务器期间,SQL Server开始使用.NET 4.0SQLCLR.这意味着在SQL中没有使用CLR,或者至少通过阅读这些来源是我的理解:

http://software.intel.com/en-us/blogs/2009/10/16/sql-server-2008-sqlclr-net-framework-version/

www.sqlskills.com/BLOGS/BOBB/post/On-SQL-Server-and-NET-40.aspx

我们得到的只是这种类型的错误消息:

消息6517,级别16,状态1,行1无法创建AppDomain"xxx.dbo [ddl] .3".方法的类型签名不是Interop兼容的.

运行声明(由@ john-christensen建议)

select * from sys.dm_clr_properties
Run Code Online (Sandbox Code Playgroud)

得到以下信息:

*Name*      *Value*
directory   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
version     v4.0.30319
state       CLR is initialized
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个或如何强制SQL Server CLR使用早期版本的框架?

.net sql-server sqlclr sql-server-2008-r2

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

实体框架4.2 exec sp_executesql不使用索引(参数嗅探)

对于针对SQL Server 2008 R2运行的实体框架(4.2)生成的简单SQL查询,我遇到了一些主要的性能问题.在某些情况下(但不是全部),EF使用以下语法:

exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE', @param1...
Run Code Online (Sandbox Code Playgroud)

在其他情况下,只需执行原始SQL,并将提供的参数烘焙到查询中.我遇到的问题是使用sp_executesql执行的查询忽略了目标表上的所有索引,导致执行查询极差(通过检查SSMS中的执行计划来确认).

经过一些研究,听起来这个问题可能是由"参数嗅探"造成的.如果我附加OPTION(RECOMPILE)查询提示,如下所示:

exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE OPTION(RECOMPILE)', @param1...
Run Code Online (Sandbox Code Playgroud)

使用目标表上的索引,并且查询执行速度非常快.我还尝试在数据库实例(http://support.microsoft.com/kb/980653)上切换用于禁用参数嗅探(4136)的跟踪标志,但是这似乎没有任何效果.

这给我留下了一些问题:

  1. 无论如何将OPTION(RECOMPILE)查询提示附加到Entity Framework生成的SQL?
  2. 反正有没有阻止Entity Framework使用exec sp_executesql,而只是运行原始SQL?
  3. 还有其他人遇到这个问题吗?还有其他提示/提示吗?

附加信息:

  1. 我确实通过SSMS重启了数据库实例,但是,我将尝试从服务管理控制台重新启动服务.
  2. 参数化设置为SIMPLE(is_parameterization_forced:0)
  3. 针对特殊工作负载进行优化具有以下设置
    • 值:0
    • 最小值:0
    • 最大值:1
    • value_in_use:0
    • is_dynamic:1
    • is_advanced:1

我还要提一下,如果我通过服务管理控制台重新启动SQL Server服务,在使用下面的脚本启用跟踪标志4136后,实际上似乎清除了跟踪标志...也许我应该以不同的方式这样做......

DBCC TRACEON(4136,-1)
Run Code Online (Sandbox Code Playgroud)

entity-framework parameter-sniffing sql-server-2008-r2 sp-executesql

24
推荐指数
2
解决办法
4448
查看次数

如何将基本身份验证质询转发给报表管理器URL

*底部描述了环境的详细信息.

我正在尝试为报告服务构建身份验证解决方案.

应使用我们现有的costumer数据库对在线客户进行身份验证,而本地管理用户可以使用简单的基本身份验证.

我已经SSRS使用codeplex示例进行了安全扩展,我用来发出基本挑战的方法如下

public void GetUserInfo(out IIdentity userIdentity, out IntPtr userId)
{
    if (HttpContext.Current != null && HttpContext.Current.User != null)
        userIdentity = HttpContext.Current.User.Identity;
    else
    {
        HttpContext.Current.Response
            .AddHeader("WWW-Authenticate", "Basic realm=\"ReportServer\"");
        HttpContext.Current.Response.Status = "401 Unauthorized";
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.Close();
        userIdentity = new GenericIdentity("not authorized");
    }

    userId = IntPtr.Zero;
}
Run Code Online (Sandbox Code Playgroud)

这样,当没有通过该LogonUser方法的用户(即直接URL访问,出价报告部署,而不是常规用户应用程序)受到基本登录/密码弹出窗口的挑战时.为了支持这一点,我制作了如下的httpmodule

void IHttpModule.Init(HttpApplication context)
{
    context.AuthenticateRequest += CustomAuthenticateRequest;
}

void CustomAuthenticateRequest(object sender, EventArgs e)
{
    var app = sender as HttpApplication;

    if (app == null) return;

    var basicAuth = app.Context.Request.Headers["Authorization"]; …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008-r2 reporting-services ssrs-2008

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

每个用户表都应该具有聚簇索引吗?

最近我在数据库中找到了几个没有定义聚簇索引的表.但是定义了非聚集索引,因此它们处于HEAP状态.

在分析中,我发现select语句对非聚集索引中定义的列使用过滤器.

这些表上没有聚簇索引会影响性能吗?

sql-server indexing sqlperformance sql-server-2008 sql-server-2008-r2

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

如何让SQL Server 2008r2向我显示错误?

我正在运行一个插入脚本,该脚本应该从SSMS将13,381行插入到空白数据库中.它告诉我"查询已完成但有错误"并且只插入了13357行.

错误列表中没有显示任何内容.如何找到脚本中的错误?

谢谢!

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

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

调试不显示当前存储过程版本

我正在研究SQL Server 2008 R2实例.我刚刚更改了存储过程的代码.当我尝试调试该proc时,SSMS调试窗口显示版本的代码.

我该怎么做才能强制SSMS呈现当前版本的代码?

提前致谢.

sql-server debugging sql-server-2008 sql-server-2008-r2

23
推荐指数
3
解决办法
6117
查看次数

使用LIKE或类似的完整搜索操作搜索XML

我想搜索XML值列以查看是否包含字符串.我不知道架构,我想知道字符串是否包含在任何地方.我不知道XPATH是否适用于这种情况.

相当于

Select s.Name, ts.ValueXML from table t (nolock) 
join table2 ts (nolock) on t.key_Id = ts.key_Id
join table3 s (nolock) on ts.key_Id=s.key_Id
where s.Name like '%Lab%' and ts.ValueXML  like '%PreviewDateRange%'
Run Code Online (Sandbox Code Playgroud)

错误:参数数据类型xml对于类似函数的参数1无效.

相关ts表格栏目

ValueXml (XML(.), null)

我正在搜索的项目应该是一个属性.因此,如果上述情况不可能,则包含该属性的任何内容都将是一个不错的选择.

xml sql xpath sql-server-2008-r2

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

SQL Server 2008 Spatial:在多边形中查找点

我正在使用SQL Server 2008空间数据类型.我有一个表所有状态(作为多边形)作为数据类型GEOMETRY.现在我想检查作为数据类型GEOGRAPHY的点的坐标(纬度,经度)是否在该状态内.

我找不到使用新空间数据类型的任何示例.目前,我有一个多年前实施的解决方法,但它有一些缺点.

我有SQL Server 2008和2012.如果新版本有一些增强功能,我也可以开始使用它.

谢谢.

更新1:

我正在添加一个代码示例,以便更清晰.

declare @s geometry  --GeomCol is of this type too.
declare @z geography --GeogCol is of this type too.

select @s = GeomCol
from AllStates
where STATE_ABBR = 'NY'

select @z = GeogCol
from AllZipCodes
where ZipCode = 10101
Run Code Online (Sandbox Code Playgroud)

sql-server spatial geospatial sql-server-2008 sql-server-2008-r2

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

PHP和SQL Server - 字段名称被截断

这是相关代码:

function connect(){
    // DB credentials and info defined here....
    $connection = odbc_connect("DRIVER={SQL Server Native Client 11.0}; Server=$server; Database=$db;", $loginname, $loginpass);
    return $connection;
}

function odbc_fetch_results($stmt, &$results) {
    $numrows = odbc_num_rows($stmt);
    $row = odbc_fetch_array($stmt);
    print_r($row); // Prints: Array ( [MEASUREMENT_UNI] => kg)
    if($row){
         $results = array ($row);
         while( $row = odbc_fetch_array($stmt)){
            array_push($results, $row);
         }
    }
    return $numrows;
}

$sql = "select * from measurements where ID=$id";
$stmt = executeSQL($conn,$sql);
$nrows = odbc_fetch_results($stmt, $results);
odbc_free_result($stmt);
print_r($result[0]); // Prints: Array ( [0] …
Run Code Online (Sandbox Code Playgroud)

php sql-server odbc sql-server-2008-r2

23
推荐指数
2
解决办法
2930
查看次数

选择仅属于特定部门的用户

我有下表有两个字段,即a和b,如下所示:

create table employe
(
    empID varchar(10),
    department varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

插入一些记录:

insert into employe values('A101','Z'),('A101','X'),('A101','Y'),('A102','Z'),('A102','X'),
             ('A103','Z'),('A103','Y'),('A104','X'),('A104','Y'),('A105','Z'),('A106','X');


select * from employe;
Run Code Online (Sandbox Code Playgroud)
empID   department
------------------
A101    Z
A101    X
A101    Y
A102    Z
A102    X
A103    Z
A103    Y
A104    X
A104    Y
A105    Z
A106    X
Run Code Online (Sandbox Code Playgroud)

注意:现在我想显示仅属于该部门Z且仅属于该部门的员工Y.因此,根据条件,A103应该显示唯一的员工,因为他只属于部门ZY.但员工A101不应该出现,因为他属于Z,X, and Y.

预期成果:

如果条件是:ZY则结果应该是:

empID
------
A103
Run Code Online (Sandbox Code Playgroud)

如果条件是:ZX则结果应该是:

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

sql sql-server postgresql sql-server-2008-r2

23
推荐指数
4
解决办法
2533
查看次数