我已经尝试Tasks>Generate Scripts...并在高级脚本选项中设置了“脚本登录”,但我在输出中得到了这个:
/* For security reasons the login is created disabled and with a random password. */
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以使用密码对这些登录进行脚本编写,或者使用其他方法将登录从 2008R2 实例转移到 2014 实例?
鉴于以下
-- table ddl
create table dbo.f_word(
sentence_id int NULL,
sentence_word_id int NULL,
word_id int NULL,
lemma_id int NULL,
source_id int NULL,
part_of_speech_id int NULL,
person_id int NULL,
gender_id int NULL,
number_id int NULL,
tense_id int NULL,
voice_id int NULL,
mood_id int NULL,
case_id int NULL,
degree_id int NULL,
citation nvarchar(100) NULL
);
-- create partition function
create partition function pf_f_word_source_id (int)
as range left for values
(
1,2,3,4,5,6,7,8,9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23
);
-- create the partition scheme
create partition scheme ps_f_word …Run Code Online (Sandbox Code Playgroud) 我有这个小型 CLR,它对列中的字符串执行 RegEX 函数。
在 Windows Server 2012R2 上的 SQL Server 2014 (12.0.2000) 上运行时,进程崩溃
Msg 0, Level 11, State 0, Line 0 当前命令发生严重错误。结果,如果有的话,应该被丢弃。
如果我这样做,并给出堆栈转储
select count (*) from table where (CLRREGEX,'Regex')
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
select * from table where (CLRREGEX,'Regex')
Run Code Online (Sandbox Code Playgroud)
它返回行。
在 Windows 8.1 上运行的相同 SQL Server 版本上完美运行。
有任何想法吗?
-- 编辑就这么简单
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlTypes; //SqlString, SqlInt32, SqlBoolean
using System.Text.RegularExpressions; //Match, Regex
using Microsoft.SqlServer.Server; //SqlFunctionAttribute
public partial class UserDefinedFunctions
{
public static readonly RegexOptions Options = RegexOptions.IgnorePatternWhitespace | …Run Code Online (Sandbox Code Playgroud) SQL Server 2014:
我们有一个非常大(1 亿行)的表,我们需要更新其中的几个字段。
对于日志运输等,我们显然也希望将其保持为一口大小的交易。
如果我们让下面运行一会儿,然后取消/终止查询,那么到目前为止所做的工作会全部提交,还是需要添加明确的 BEGIN TRANSACTION / END TRANSACTION 语句以便我们可以随时取消?
DECLARE @CHUNK_SIZE int
SET @CHUNK_SIZE = 10000
UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01'
where deleted is null or deletedDate is null
WHILE @@ROWCOUNT > 0
BEGIN
UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01'
where deleted is null or deletedDate is null
END
Run Code Online (Sandbox Code Playgroud) 我有以下形式的查询:
SELECT ...
FROM ColumnstoreTable cs
CROSS APPLY (
SELECT *
FROM (VALUES
('A', cs.DataA)
, ('B', cs.DataB)
, ('C', cs.DataC)
) x(Col0, Col1)
) someValues
Run Code Online (Sandbox Code Playgroud)
这从 Columnstore 支持的子查询 ( ColumnstoreTable) 中获取每一行并将这些行相乘。这本质上是一个UNPIVOT. 真正的查询比这更大。这部分查询会进入其他处理。
这里的问题是这CROSS APPLY是作为一个循环连接实现的,这是一个合理的选择。不幸的是,循环连接不支持批处理模式。
这部分查询对性能非常关键,我怀疑以批处理模式运行它可能对性能非常有益。
我怎样才能重写这个查询,这样我就不会退出批处理模式?
我确实尝试使用临时表而不是VALUES,但这并没有改变这样一个事实,即没有相等连接条件来进行哈希连接。
如在 MSDN 上使用公用表表达式中所示,您可以将 CTE 定义为:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
Run Code Online (Sandbox Code Playgroud)
并使用它:
SELECT <column_list> FROM expression_name;
Run Code Online (Sandbox Code Playgroud)
假设我有以下 2 个 CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Run Code Online (Sandbox Code Playgroud)
一个查询为两个 CTE 输出相同的结果,因为内部查询是相同的。这两者之间的唯一区别是cte2(name)在其声明中定义了列名( )。
当我执行两个 CTE 时,我看不到执行计划有任何不同。
我只是想知道:
为什么 HADR 池中可用性组的工作线程数会增加到远远超过“通常每个副本有 3-10 个共享线程”的最低使用量?
在一种情况下,我们观察到 300 多个线程的使用情况,总共有 3 个可用性组和 10 个数据库。SQL Server 2014 SP1。
我们的线索是二级副本的备份、主副本的高活动、二级副本的报告。
AG 位于 VMware 上的数据中心。总共 16 个调度程序,通常的工作线程在 200 范围内。服务器上的max_dop为 2。
我们观察到导致拒绝服务的工作线程激增。将工作线程归因于 AG 是我们的假设,因为只有那些工作线程才能跨越限制。
在上下文中阅读的 SQL Server Premier 现场工程师博客中的以下链接并没有给我一个完整的答案:
我希望有人可以为我指出正确的方向。到目前为止,这是我的工作。
SELECT * FROM sys.identity_columns是一个系统视图,它给出了“last_value”,但该视图的定义使用了一个内部函数IdentityProperty(colName, 'LastValue')- 所以这是一个死胡同(不是从那里的系统表中提取它)。
互联网上的任何地方(我看过)都建议使用DBCC IDENT_...命令来揭示价值,但这仍然让我对它的实际存储位置一无所知。
因此,我开始DBCC PAGE(TestDB,1,1325,3)根据我的测试工具数据库搜索各个页面,并使用该RESEED命令在值 10 和 12 之间重新设定种子。
在这一过程中,我注意到的十六进制值IAM: Header,IAM: Single Page Allocations并且IAM: Extent Alloc Status Slot 1一切都改变了。(并且意识到它们无论如何都会随着bUse1值定期更改,而bUse1值也会自行递增)。
所以另一个死胡同,我完全没有想法。我还能在哪里搜索?
我正在运行 SQL Server 2014。我对内部知识有着永不满足的渴望,但还没有遇到过像这样难以捉摸的东西。它引起了我的注意,因为从理论上讲,它(绝对值)存储在某处并且应该(可以说)是可定位的。在我寻找内部存储数据/元数据的位置的过程中,这个特殊的价值让我觉得特别难以捉摸。我猜/希望有人会过来告诉我,你可以得到它,DBCC PAGE但我找错了地方。
我有一个包含近 1TBFILESTREAM数据的数据库,我不需要备份(如果数据被删除,它会在几个小时内自动重新创建,所以它并不重要)。大多数数据每隔几天就会更改一次,因此差异备份并不能真正帮助减小大小。
通过将恢复模式设置为Full,创建一个单独FILEGROUP的FILESTREAM,然后只备份“主要”,我让备份按照我需要的方式工作FILEGROUP。这导致的问题是日志文件(也被备份)现在不必要地大,因为它包含FILESTREAM数据。
SIMPLE恢复模式剥夺了我对特定FILEGROUPs进行备份的能力,所以我认为这也不是一种选择。
我的想法是将FILESTREAM数据移动到一个单独的数据库,但现在我正在失去参照完整性,并且肯定还会继承许多其他问题。
有没有办法在Simple恢复模式下创建部分备份(不将FILESTREAM表设置为只读)?如果没有,我的问题还有其他合理的解决方案吗?
sql-server backup transaction-log filestream sql-server-2014
我们经常会遇到“如果不存在,则插入”的情况。Dan Guzman 的博客对如何使此进程线程安全进行了出色的调查。
我有一个基本表,它只是将字符串从SEQUENCE. 在存储过程中,我需要获取该值的整数键(如果它存在),或者INSERT它然后获取结果值。该dbo.NameLookup.ItemName列有一个唯一性约束,因此数据完整性没有风险,但我不想遇到异常。
这不是一个IDENTITY所以我无法获得,SCOPE_IDENTITY并且NULL在某些情况下价值可能是。
在我的情况下,我只需要处理INSERT桌面上的安全问题,所以我试图决定是否使用MERGE这样的方法更好:
SET NOCOUNT, XACT_ABORT ON;
DECLARE @vValueId INT
DECLARE @inserted AS TABLE (Id INT NOT NULL)
MERGE
dbo.NameLookup WITH (HOLDLOCK) AS f
USING
(SELECT @vName AS val WHERE @vName IS NOT NULL AND LEN(@vName) > 0) AS new_item
ON f.ItemName= new_item.val
WHEN MATCHED THEN
UPDATE SET @vValueId = f.Id
WHEN NOT MATCHED BY TARGET THEN
INSERT …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql-server-2014 ×10
t-sql ×2
backup ×1
batch-mode ×1
columnstore ×1
cte ×1
filestream ×1
hadr ×1
identity ×1
merge ×1
partitioning ×1
sql-clr ×1
transaction ×1
unpivot ×1