Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

3
将数据从SQL Server 2005迁移到2016
我是管理SQL Server的新手,但是我对SQL语言和制作SSIS包感到满意。 我想将数据从SQL Server 2005迁移到2016。 我的问题是我是否需要担心系统数据库和其他对象,例如索引,存储过程,视图,安全性和权限。登录,或者我可以只迁移数据。 在这种情况下,建议使用此程序。

4
database_scoped_configurations中的错误
我正在尝试从以下位置插入结果集: SELECT * FROM sys.database_scoped_configurations 到临时表中,因为我想检查服务器上所有数据库的设置。所以我写了这段代码: DROP TABLE IF EXISTS #h CREATE TABLE #h(dbname sysname, configuration_id INT, name sysname, value SQL_VARIANT, value_for_secondary SQL_VARIANT) EXEC sys.sp_MSforeachdb 'USE ?; insert into #h(dbname, configuration_id, name, value,value_for_secondary) SELECT ''?'' as dbname, * FROM sys.database_scoped_configurations D' SELECT * FROM #h H 但随后将只有每个数据库一行,而不是4行,我从在每个数据库中运行一个普通的选择期待。 我知道有比使用sp_MSForEachDB更好的编码方法,我尝试了几种方法。但是我仍然每个数据库只获得一行。我已经在SQL Server 2016 …

2
安装后配置管理器中缺少“ SQL Server网络配置”节点
我有一台运行Windows 2012 R2 Datacenter 64位的服务器。我使用的是SQL 2016 RC3,没有问题,我想将其替换为MSDN上的RTM版本。 卸载RC3,然后安装RTM之后,我无法远程连接到服务器。经过检查,我发现在Configuration Manager中没有“ SQL Server网络配置”的节点。列出了32位版本,并启用了TCP / IP。如何安装此丢失的节点? 我已启动SQL Browser服务,并尝试修复2016安装。似乎没有什么能使这个缺失的成分复活。 我发现有趣的是,有些RC3和RTM安装遗留下来的无法卸载。我不确定这是否相关。我按照Microsoft有关卸载SQL Server的说明进行操作,所以我觉得我做对了所有事情。

2
添加两列时查询不响应
当我在选择中添加两列时,查询没有响应。列的类型是nvarchar(2000)。这有点不寻常。 SQL Server版本为2014。 只有一个主索引。 整个记录只有1000行。 这是之前的执行计划(XML showplan): 之后的执行计划(XML showplan): 这是查询: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < Batch_Tasks_Queue.Finish_Time and Batch_Tasks_Queue.id <> btq.id and btq.Start_Time is not null and btq.State …

2
sp_msforeachdb在后台如何工作?
我需要解决我遇到的问题,并且需要一些帮助来了解sp_msforeachdb的工作方式以解决我的问题。 每次我运行sp_msforeachdb时,都会发生错误 Msg 102, Level 15, State 1, Incorrect syntax near '61' 我的代码示例如下: EXEC SP_msforeachdb 'SELECT ''?'' AS Database FROM ?.sys.objects WHERE name like ''%aetna%'' 但是,我将什么查询作为sp_msforeachdb的参数并不重要。每次我遇到相同的错误。我确实有一个以'61s1d'开头的数据库,所以我认为它的数据库名称有问题,但是老实说我不知道​​sp_msforeachdb的幕后情况。 注意事项。 它是唯一一个以数字开头的数据库 我可以尝试使用“如果数据库像'%61%'那样不要执行......”之类的代码,但是仍然会出现相同的错误。 我无法测试更改数据库名称的情况-与之连接的东西太多了。 如果我创建一个以“ 51”开头的测试数据库,那么我也会得到该数据库的错误 我该如何克服?

2
> =和>的步内统计值的基数估计
我正在尝试了解SQL Server如何尝试估计SQL Server 2014中的“大于”和“大于等于” where子句。 我想我确实了解基数估算,例如当我踏上台阶时 select * from charge where charge_dt >= '1999-10-13 10:47:38.550' 基数估计为6672,可以很容易地计算为32(EQ_ROWS)+ 6624(RANGE_ROWS)+ 16(EQ_ROWS)= 6672(以下屏幕截图中的直方图) 但是当我这样做 select * from charge where charge_dt >= '1999-10-13 10:48:38.550' (将时间增加到10:48,所以不是一步) 估计是4844.13。 该如何计算?


1
表存储的层次结构中的层次结构权限
假设以下数据库结构(如有需要,可以修改)... 我正在寻找一种确定给定页面上给定用户的“有效权限”的好方法,该方法允许我返回包含Page和有效权限的行。 我认为理想的解决方案可能包括使用CTE来执行递归的功能,以评估当前用户给定页面行的“有效权限”。 背景和实施细节 上面的架构表示内容管理系统的起点,在其中可以通过将用户添加到角色或从角色中删除来授予用户权限。 系统中的资源(例如页面)与角色关联,以授予链接到该角色的用户组所授予的权限。 这个想法是能够通过简单地拒绝所有角色并将树中的根级别页面添加到该角色,然后将用户添加到该角色来轻松锁定用户。 当(例如)为公司工作的承包商长期不可用时,这将允许许可结构保留在原位,然后通过简单地从该角色中删除用户,也将允许相同的原始权限授予。 权限基于典型的ACL类型规则,遵循这些规则可能适用于文件系统。 CRUD权限应为可为空的位,因此,在满足以下条件的情况下,可用值是true,false和未定义: 假+任何东西=假 正确+未定义=正确 真+真=真 未定义+未定义=未定义 如果任何权限为假->假 否则为true-> true 其他(所有未定义)-> false 换句话说,除非您通过角色成员资格授予任何权限,并且拒绝规则将覆盖允许规则,否则您将无任何权限。 应用于此权限的“集合”是指直到当前页面并包括当前页面的所有应用于树的权限,换句话说:如果将false应用于应用于此页面的树中任何页面的任何角色,则结果为false ,但是如果未定义到此处的整个树,则当前页面包含true规则,则此处的结果为true,但对父级而言将为false。 如果可能的话,我想宽松地保留db结构,同时请记住,我的目标是能够执行以下操作:select * from pages where effective permissions (read = true) and user = ?因此,任何解决方案都应能够使我拥有一个具有有效权限的可查询集。以某种方式(只要可以指定条件,返回它们是可选的)。 假设存在2个页面,其中1个是其他角色的子代,并且存在2个角色,一个用于admin用户,一个用于只读用户,这两个页面都仅链接到根级别页面,我希望看到这样的内容作为预期的输出: Admin user: Id, Parent, Name, Create, Read, Update, Delete 1, null, Root, True …


1
按计划备份和截断事务日志的最佳方法
我不是DBA,但是无论如何,我必须戴上DBA的帽子,并在SQL Server实例上设置维护计划。 因此,一段时间以来,我一直在SSIS过夜过程中运行“ 执行SQL任务”以执行备份-基本上运行master.dbo.xp_create_subdir以确保目标文件夹存在,然后运行BACKUP DATABASE [DbName] TO DISK = 'G:\Backups\DbName\DbName.bak' WITH INIT。 每当该任务失败时,其余过程都会中止,并且我会收到通知,并于第二天早上来通知事务日志的驱动器已满,因此我将手动截断它们并继续前进。 ..直到故事重演,并且事务日志再次超出了可用磁盘空间。 “手动截断”脚本如下所示: use Staging; alter database Staging set recovery simple alter database Staging set recovery full dbcc shrinkfile ('Staging_log', 0, truncateonly); go 因此,我对此感到厌倦,因此决定尝试正确地做事,并按照此处的步骤创建一个实际的维护计划: 问题是,我之前从未做过此事,所以我有几个问题: 像这样备份事务日志会自动截断它们,还是我需要做其他事情? 可以同时运行数据和事务日志备份吗?如果没有,那么执行此操作的正确方法是什么? 备份文件将在一夜之间被另一个过程获取,该过程将捕获服务器上的所有文件并将它们存储在其他位置-2天后使备份集过期是个好主意吗?我是否需要使它们全部过期? 清理任务分别删除的子文件夹下的“旧” .bak和.trn文件G:\Backups。那有意义吗? 最好在SSIS中执行此操作,以便在备份失败时/我可以在ETL中失败吗?还是我的ETL流程应该在乎? 抱歉,如果一个帖子中有太多问题,如果需要,我将编辑并询问多个问题-我认为它们都是紧密相关的。

3
我是否应该仅出于PK目的将自动递增/ IDENTITY字段添加到交叉引用表中?
我将以下交叉引用表添加到我的SQL Server托管的数据库中: company_id bigint not null (FK) org_path nvarchar (2048) not null 该company_id字段引用id另一个表(其中是主键)中的字段。 假设还可以有多个具有相同记录的记录,则company_id任何主键都必须使用两个字段。但是,由于org_pathSQL Server太长,因此无法使用这两个字段创建密钥。 至于org_path,这是它存在的唯一表。对该表的查询极有可能会询问所有条目或的所有org_path条目company_id。或者换种说法,该表是否会被查询似乎令人怀疑org_path。此外,它不太可能org_path会被更新,更不可能被插入并且可能很少被删除。 我希望总行数可以低到几千。 另外,这nvarchar (2048)是因为该值必须模仿第三方数据库中的值。一个典型的例子是 \Translation Providers\[customer name]\[order name]\ 并可能包含变音符号。 所以我的问题是这样的:添加自动递增id字段并将其与company_id主键结合使用会更有效,还是会增加不必要的开销-并且company_id作为另一个表中主键的事实是否具有任何意义?效果在这里?

4
字母数字与字母数字字符串分开
我有一个字母数字字符串作为输入,我想从中得到两个结果: 删除所有数字的字符串 和 一个整数,它是输入字符串中所有数字的总和。 例如,对于此输入: GR35hc7vdH35 我想要以下输出: | Col1. | Col2 | ---------------------------------- | GRhcvdH | 23 | 怎么办

2
层次结构CLR是开源的吗?
内置的architectureid是CLR,它以有效的二进制形式存储路径,并提供其他有用的功能。 不幸的是,表示路径的深度是有限的,对于一棵二叉树来说大约是1427。我想为必然要达到此限制的复杂的现有应用程序增加该限制。我不想更改类型的界面。我不相信我可以开始更改类型的接口,而不会在所有必须更改的代码中引入细微的错误。 从理论上讲,我可以创建一个“ binhierarchyid” CLR UDT,它实现与hierarchicalid相同的接口,但仅支持二进制树。那应该使我的深度达到〜7000,同时仍保持在900字节的限制之内。不确定这项工作有多大。 是否可以在任何地方找到该architearchid CLR的来源,以便我可以基于它创建更深层次的结构呢?

3
执行计划未使用INDEX,而是使用表扫描
我知道使用索引或表扫描时,SQL Server使用统计信息来查看哪个更好。 我有一个2000万行的表。我在(SnapshotKey,Measure)上有一个索引,并且此查询: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand 查询返回500k行。因此,查询仅选择表的2.5%的行。 问题是为什么SQL Server不使用我拥有的非聚集索引,而是使用表扫描? 统计信息已更新。 值得一提的是查询性能还是不错的。 表扫描 强制索引 表/索引结构 CREATE TABLE [t1]( [SnapshotKey] [int] NOT NULL, [SnapshotDt] [date] NOT NULL, [Measure] [nvarchar](30) NOT NULL, [MeasureBand] [nvarchar](30) NOT NULL, -- and many more fields …

1
关于tempdb版本存储的问题
我们今天遇到了一个错误: 错误:3967,严重性:17 从我可以看出,它基本上是“完整版商店”。这引起了一些我很难回答的问题,因为在我的商店里,我们从未遇到过此错误: 如果有预设的最大大小(基于总的tempdb大小或其他),它是动态的吗? 有没有可以使它动态化的设置? 我们可以基于此设置警报吗?(即用于跟踪大小的DMV等)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.