Questions tagged «sql-server»

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

1
数据库用户和服务器登录名以及它们之间的映射
我在家中有一个SQL Server 2008 R2 Express Edition实例,在客户端的服务器上有一个实例,我正在使用该实例来开发使用Access作为前端的应用程序。该应用程序有5个独立的登录名,我可以在连接字符串中使用(基于用户所在的访问组)。家庭实例具有多个数据库-其中一些与该应用程序无关 随着时间的推移,我已经在每个实例中手动创建了登录名(可能以不同的顺序)。 我希望能够(不止一次)从正在使用的数据库的家用计算机中进行备份,并使用还原将其加载到客户端的实例上,只需将备份集中的文件移动到实际位置即可。还原过程中在此服务器上使用的文件。我不理解的是数据库用户和登录名之间的映射。 我以为名称的对应关系就足够了,但是在尝试解决还原数据库的用户似乎未映射到服务器登录名的问题时,我遇到了Transact-SQL ALTER USER语句,尤其是有关使用WITH LOGIN的参考以及有关“ SID”的一些讨论。 由于(我假设)服务器登录名在每个实例中都有不同的SID,是否表示在实例之间加载备份后,我必须使用一系列ALTER USER WITH LOGIN命令再次重新连接映射?

1
为什么“从源表中将*选择到目标表中”比“从源表中将*选择到目标表中”要快
这个标题就是问题。我很好奇知道答案。有人告诉 选择进入是最少登录到简单恢复模型数据库中的。。。我根本没有进入。 微软摘录: SELECT ... INTO的日志记录数量取决于对数据库有效的恢复模型。在简单恢复模型或批量记录的恢复模型下,批量操作的记录最少。使用最少的日志记录,使用SELECT…INTO语句比创建表然后用INSERT语句填充表更有效。 寻求帮助 谢谢

5
SQL Select花费太多时间执行
这是从临时表中进行的简单选择,左键将现有表保留在其主键上,其中两个子选择使用前1个引用联接表。 在代码中: SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3, JoinedTable.Col1, JoinedTable.Col2, ( SELECT TOP 1 ThirdTable.Col1 -- Which is ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeColumn = JoinedTable.SomeColumn ) as ThirdTableColumn1, ( SELECT TOP 1 ThirdTable.Col1 -- Which is also ThirdTable's Primary Key FROM ThirdTable WHERE ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn ) as ThirdTableColumn2, FROM …

1
在动态SQL中打印参数
我已经将动态SQL用于许多任务,并不断遇到相同的问题:打印在动态T-SQL语句中使用的变量的值。 例如: Declare @SQL nvarchar(max), @Params nvarchar(max), @DebugMode bit, @Foobar int select @DebugMode=1,@Foobar=364556423 set @SQL='Select @Foobar' set @Params=N'@Foobar int' if @DebugMode=1 print @SQL exec sp_executeSQL @SQL,@Params ,@Foobar=@Foobar 上面代码的打印结果只是“选择@Foobar”。有什么方法可以动态打印正在执行的sql的值和变量名?还是在执行打印时,将参数替换为其实际值,以便SQL可重新运行? 我玩过创建一个或两个函数来完成相似的工作,但是却涉及数据类型转换,模式匹配截断问题和非动态解决方案。我很好奇其他开发人员如何在不手动打印每个变量的情况下解决此问题。

2
SQL Server开发人员迁移到Oracle的资源
对于希望学习Oracle基础知识的SQL Server开发人员,您可以推荐哪些资源? 我正在寻找描述这些系统之间差异的全面白皮书或博客,并回答诸如“ 如何创建身份”列之类的问题。或什么数据类型等效于float?。

1
如何为两个或多个表的JOIN结果建立索引,以提高SQL Server的性能?
我是索引编制的新手,并介绍了索引编制的基础知识。我可以在相应表的索引部分内找到主键约束的默认聚集索引,但是创建外键约束后,我找不到任何索引。 现在我有一个要求,应该在其中实施索引以提高性能。我已经读过关于索引外键以提高JOIN结果的性能的信息。 我是否需要将外键列添加到其他非聚集索引中,或者外键具有默认索引? 如果我的SQL表结构如下并且我使用t1_col3的WHERE子句进行了JOIN查询,如何有效地实现索引 table1 table2 ------ ------ t1_col1(pk) t2_col1(pk) t1_col2 t2_col2 t1_col3 t2_col3 t1_col4 t2_col4 t2_col1(FK)



1
sp_prepexec(sp_execute)与sp_executeSQL
问题的实质:实际的存储过程是实现临时表缓存的唯一机制,还是sp_executeSQL/ 等系统存储过程sp_execute也利用了它们? 我不是DBA,所以请少说话。我们的应用程序发送了准备好的语句,这些语句从探查器中运行,我看到它运行所有SQL,sp_prepexec这是同时运行sp_prepare和的系统过程sp_execute。我要尝试做的是弄清楚我是否从临时表缓存中受益。 我一直在使用带有object_id()的本指南来检查行为 https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html 然后,此博客文章上的第3点表明EXEC无法使用临时表缓存,但忽略了sp_executeSQL是否可以:http : //blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- sp-executesql.aspx 在通过客户端发送的查询中,我创建了一个简单的临时表。 DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement SELECT 1 AS id INTO #tmp SELECT OBJECT_ID('tempdb..#tmp'); 在探查器中,我可以看到: declare @p1 int set @p1=NULL exec sp_prepexec @p1 output,N'@P1 int',N'declare @foo INT = @P1 SELECT 1 …


1
使用的数据库镜像协议TCP端口。一种默认,一种动态?
在SQL Server Always On可用性组™的主/辅助副本上执行以下查询时 SELECT DISTINCT local_tcp_port,protocol_type,num_reads,num_writes FROM sys.dm_exec_connections WHERE local_net_address is not null; 显示两个用于数据库镜像协议的本地tcp端口,5022&63420 Server Name local_tcp_port protocol_type num_reads num_writes ServerName 5022 Database Mirroring 102942598 5 ServerName 63420 Database Mirroring 5 89655349 该5022端口是预期的,因为它是配置为镜像端点的端口。 另一个似乎是一个动态端口,为什么使用这个端口? 它可能与以下事实有关:一个显示大量的读取(5022),而另一个显示大量的写入(63420)。 内部版本:13.0.5264.1

1
DBCC CheckDB之后,性能监视器中的数据库缓存内存显着下降
我们一直在监视一些SQLServer: Memory Manager指标,并注意到DBCC CheckDB工作后指标 Database Cache Memory (KB) 下降明显。确切地说,它从140 GB缓存的DB内存降至60 GB。之后,请在一周内慢慢增加速度。(“ Free Memory KB”的数量从之后的20 GB变为100 GB CheckDB) DBCC CheckDB 在每个星期日运行,因此数据库高速缓存内存必须每周再次增加 What is the behavior of this ? Why CheckDB pushes database pages out of memory ? 第二个问题是为什么“ buffer cache hit ratio” DBCC CheckDB完成后没有变化? 它平均为99.99%,而在DBCC CheckDB工作后下降至〜98.00%,并很快恢复至99%,而我预计buffer cache hit ratio会大幅下降,因为数据库数据必须再次从存储读取到RAM?

3
在数据库表中使用SPID(而不是表变量)
用于预订事物的交易数据库... 我们的供应商被要求用@tablevariables替换#temptables(由于繁重的编译锁),但他们替换为一个实际表,该表将SPID作为列添加,以确保存储过程仅作用于适用的行。 您认为这种操作方法有任何风险吗?在所有事务都隔离在它们自己的事务中之前,我担心我们最终可能会将该表锁定一堆,但他们的意见是SQL使用行级锁定并且不会创建更多的锁。 SQL Server版本:2016 Enterprise-13.0.5216.0 CREATE TABLE dbo.qryTransactions ( ID int IDENTITY (0,1) NOT NULL CONSTRAINT pk_qryTransactions PRIMARY KEY CLUSTERED, spid int NOT NULL, OrderID int, ItemID int, TimeTransactionStart datetime, TimeTransactionEnd datetime, ...other fields ) CREATE INDEX idx_qryTransactions_spidID ON qryTransactions (spid, ID) INCLUDE (ItemID, OrderID, TimeTransactionStart, TimeTransactionEnd)

1
在where子句中同时包含“ contains”和“ =”时查询缓慢
以下查询大约需要10秒钟才能完成具有12k条记录的表 select top (5) * from "Physician" where "id" = 1 or contains("lastName", '"a*"') 但是如果我将where子句更改为 where "id" = 1 要么 where contains("lastName", '"a*"') 它会立即返回。 两列都被索引,lastName列也被全文索引。 CREATE TABLE Physician ( id int identity NOT NULL, firstName nvarchar(100) NOT NULL, lastName nvarchar(100) NOT NULL ); ALTER TABLE Physician ADD CONSTRAINT Physician_PK PRIMARY …

3
XML查询问题
我正在尝试生成SQL查询,以从以下SQL XML中获取“ DATE”值: 我已经尝试过类似的方法,但我认为我不了解这些概念。 select xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)') from Job 这是XML文本: <SearchJobConfig> <QueryID>1072</QueryID> <QueryString> <SearchCriteria name="Search query" > <ExpressionSet logicalOperator="AND"> <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="GREATER_EQUAL" dataType="string" caseSensitive="false">2019-06-01T04:00:00</SimpleAttributeExpression> <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="LESS_EQUAL" dataType="string" caseSensitive="false">2019-06-13T03:59:59</SimpleAttributeExpression> <SimpleAttributeExpression displayName="Class" npmPropertyId="1056" searchOperation="EQUALS" dataType="int32" caseSensitive="false">65</SimpleAttributeExpression> </ExpressionSet> </SearchCriteria> </QueryString> </SearchJobConfig> 预期的输出将是日期: 2019-06-01T04:00:00 2019-06-13T03:59:59 以及如何在同一行上获得结果。示例: date_val_start date_val_end 2019-06-01T04:00:00 2019-06-13T03:59:59 我正在使用SQL …

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.