当我有一个查询来检查uniqueidentifer具有空值的表中是否不存在类型的列时,我不会得到任何结果。如果子查询不返回空值,则它工作正常,并且仅在使用not in.
我知道我可以只not null检查我的子查询,但我很好奇为什么这不起作用。
查询示例:
select a.guid from tableA a where a.guid not in (select b.guid from tableB AS b)
Run Code Online (Sandbox Code Playgroud)
工作测试:
select 1 where newid() not in (select newid())
Run Code Online (Sandbox Code Playgroud)
破碎测试:
select 1 where newid() not in (select null)
Run Code Online (Sandbox Code Playgroud) 我有一个 ASP.NET MVC Web 应用程序部署到 Windows Server 2012 机器上的 IIS。当应用程序第一次启动时,它会在必要时通过实体框架创建它需要的数据库和表。这一切正常,现在我想通过 SQL Server Management Studio 对数据库进行一些管理。但是,当我打开该工具时,我只能看到系统数据库。如果我从连接字符串中删除“User Instance=true”并让应用程序再次创建数据库,我就可以看到数据库。
当User Instance=true 在连接字符串中时,为什么我无法查看Web 应用程序创建的数据库? 如果我使用具有所有角色的帐户通过 Management Studio 查看服务器实例,我希望它能够查看任何和所有数据库。
一些可能有帮助的细节:
该应用程序在 Web.config 中使用以下连接字符串:
<add name="DefaultConnection" connectionString="Data Source=.\SqlExpress;
Initial Catalog=Foo.Dashboard; Integrated Security=SSPI;User Instance=true"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
在IIS中,应用程序池设置为与身份运行LocalService和Load User Profile设置True。在 SQL Server Express 上,我们为该Local Service帐户添加了一个登录名并为其分配了dbcreator角色。当应用程序启动时,它就能够创建数据库和表,一切似乎都在运行。
然后我使用远程桌面连接到服务器并打开 SQL Server Management Studio。要连接到数据库,我输入.\SQLEXPRESS服务器名称并使用Windows Authentication. 然后我连接并且只看到系统数据库。我已将所有可能的数据库角色添加到我的登录名中,并且我看到我VIEW ANY DATABASE在有效选项卡中拥有权限。
我正在使用 SSMS 2012。我正在使用 .PRC、.TAB 和 .UDF 文件。我将这些文件扩展名添加到 SSMS,以便它已经通过工具 > 选项 > 文本编辑器 > 文件扩展名将它们视为 .SQL 文件,但最近 SSMS 已停止识别这些文件(例如,不会使用颜色编码显示它们或允许我对数据库运行它们)。有趣的是,当我从文件中删除文件扩展名时,它会识别它们,因为它选中了“将无扩展名的文件映射到 SQL 查询编辑器”。
有谁知道问题可能是什么?
我有一个 SQL Server 2008 R2 数据库,大约 15 GB。
我想为使用 SQL Server 2008 R2 Express 的合作伙伴复制它。
我删除了很多表和行,现在我确定数据小于2 GB。
我做了一个备份,发送给合作伙伴,他试图恢复它,但他收到一个错误:
CREATE DATABASE 或 ALTER DATABASE 失败,因为由此产生的累积数据库大小将超过每个数据库 10240 MB 的许可限制
我做错了什么?
完全是在管理数据库的开始。
使用 EMS SQL 管理器...最新版本。我怎么过来下面
ALTER DATABASE joneslocker2
MODIFY FILE (
NAME = joneslocker2,
MAXSIZE = UNLIMITED )
GO
Run Code Online (Sandbox Code Playgroud)
这导致错误:
用户无权更改数据库“joneslocker2”、该数据库不存在或该数据库未处于允许访问检查的状态。
我不知道接下来要设置什么。
我做的长时间运行的存储过程的一些分析和所遇到的异常的东西,根据网上图书sys.dm_exec_procedure_stats应该只显示一个每缓存的存储过程的计划行,但是有存储过程一个用户出现两次在表中。
此存储过程的两个“版本”具有截然不同的执行时间/计数。
这仅仅是因为缓存和使用了不同的计划吗?如果是这样,我没有意识到 sql server 为同一个 object_id 缓存了多个计划,我认为这是一种一对一的交易?另外,如果是这种情况,它似乎与 DMV 的 BOLS 定义相矛盾?
继此,如果是使用计划的两个版本,我怎么能知道在什么情况下使用什么样的计划?
其他人遇到过这个吗?
给定以下针对 AdventureWorks 数据库的 SQL 代码:
begin transaction;
drop trigger Sales.iduSalesOrderDetail;
alter table Sales.SalesOrderDetail
add LineNumber int null;
go
with sod as (
select
SalesOrderID,
/* other cols */
LineNumber,
NewLineNumber = row_number() over
(partition by SalesOrderID order by SalesOrderDetailID) + 1
from Sales.SalesOrderDetail
where SalesOrderID <= 44000)
update sod
set LineNumber = NewLineNumber,
ModifiedDate = getdate()
output
inserted.SalesOrderID,
/* other cols */
inserted.LineNumber;
select
SalesOrderID,
/* other cols */
LineNumber
from Sales.SalesOrderDetail
where SalesOrderID <= 44000;
rollback transaction;
Run Code Online (Sandbox Code Playgroud)
在 SQL …
我正在做一个项目,它有大约 10 万条记录。我们可以承受 1 天的停机时间,但我们需要数据始终以最新状态提供给我们。
我经历了两种选择:
1) 镜像(将在未来版本中弃用)
2) AlwaysOn 可用性组
两者看起来都不适合我的场景,因为镜像很快就会过时,并且可用性组仅在 SQL Server 的企业版中可用。我们只有BI版。
除了这些,还有什么好的选择吗?我们甚至准备花钱购买 3rd 方工具,但目前买不起企业版。
当我们自定义的、自产的 CMS 使用 GUI 创建数据表时,它会根据特定于站点的用户模式(即sitename)而不是模式创建它们dbo。
问题是我们的站点特定用户目前没有“看到”这些其他模式,即使他们在db_owner角色中。因此,某处缺少权限设置,这将授予他们对这些表进行读写的能力。
迁移到新的 SQL 服务器时发生了此问题。从 2005 工作组版到 2008 网络版。
我应该将文档版本设置为主键吗我正在开发一个文档管理系统,并且我有这两个表代表整个表的一部分。

在 DocumentVersion 表上,我将主键设置为 (version + documentID) 。如果这是一种推荐的方法,其中 documentID 的类型为 int 而版本的类型为 decimal(5,2) ,那么任何人都可以提出建议吗?或者如果我创建一个新字段并将其设置为 DocumentVersion 表中的主键会更好?谢谢