我想使用单个INSERT INTO查询将数据添加到多个表,我可以这样做吗?
如果可能,请指导我并提供语法。
下面的查询,对一个大约 600 万行的表运行需要 25 秒。当我删除最终订单时,它会在 3 秒内运行。表上没有索引(它是一个中间 SSIS ETL 目标,后来被拉入 DW。)
它不是缓存。我以任何顺序多次运行它,结果一致。
查询本身会检查序列号中的差距。SSIS 将使用它来查看是否需要重新获取任何内容。
;with edges as
(
select
ROW_NUMBER() over (partition by s1.SiteIDNumber order by s1.SequenceNumber) as rn,
s1.SiteIDNumber,
s1.SequenceNumber
from TestPlay s1
left join TestPlay s2 on s2.SiteIDNumber = s1.SiteIDNumber and s2.SequenceNumber = s1.SequenceNumber + 1
left join TestPlay s3 on s3.SiteIDNumber = s1.SiteIDNumber and s3.SequenceNumber = s1.SequenceNumber - 1
where s2.SiteIDNumber is null
or s3.SiteIDNumber is null
),
gaps as
(
select
e.rn,
e.SiteIDNumber,
e.SequenceNumber + 1 …Run Code Online (Sandbox Code Playgroud) performance sql-server t-sql sql-server-2012 gaps-and-islands
我只是想知道如何从 XML 列中提取一个整数。目前所有的数字都是 4,下面的查询可以做到。但是这个数字很快就会增长到 10,000 个,这意味着 5 位数,这个查询将无法做到。无论如何,我是否可以动态地从 Xml 列的中间<siteID>和中间取出任何整数</siteID>。任何建议将不胜感激。
SELECT
SUBSTRING(msg, patindex('%[0-9][0-9][0-9][0-9]</siteID>%',msg),4) AS DOMAIN
FROM table a(NOLOCK)
WHERE msg like '<DLR%'
ORDER BY 1 DESC
Run Code Online (Sandbox Code Playgroud) 我有一个创建如下的表。
CREATE TABLE [dbo].[Table1](
[ID] [INT] IDENTITY(1,1) NOT NULL,
[Title] [VARCHAR](255) NULL,
...
Run Code Online (Sandbox Code Playgroud)
假设最新的 ID 是 100(我有 100 条记录)
有没有办法到ALTER这个表的IDENTITY列并将自动增量值更改为现在 500?
所以最后我会得到这样的 ID 98, 99, 100, 500, 501, ....
我似乎无法在 T-SQL 中找到解决方案
我一般是 SQL 新手,所以我在设计的一些存储过程中遇到了一些问题。我的程序接受 3 个参数。位置(或表名基本上是 varchar)、房间号 (varchar) 和 'xxx-xxxx' 形式的电话号码 (char)。这是该过程的代码。
ALTER PROCEDURE [dbo].[AddPhoneNumberToRoom]
@Location varchar(25),
@Room varchar(10),
@PhoneNumber char(8)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @String varchar(100);
SELECT @String = ' UPDATE ' + @Location +
' SET PhoneNumber = ' + @PhoneNumber +
' WHERE Room = ' + @Room;
EXEC(@String);
END
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
UPDATE 语句与 FOREIGN KEY 约束“FK_Apartments_PhoneNumbers”冲突。冲突发生在数据库“CMPhone”、表“dbo.PhoneNumbers”、列“PhoneNumber”中。
电话号码在 PhoneNumber 表中,所以当我这样做时:
UPDATE Apartments SET PhoneNumber='123-4567' WHERE Room='2'
Run Code Online (Sandbox Code Playgroud)
它工作得很好。该PhoneNumbers表还看起来是这样的,只是在它的一个数字。
PhoneNumber
-----------
123-4567
Run Code Online (Sandbox Code Playgroud) SQL Server 2014 标准版
在我的情况下,我有一个巨大的表(1 亿多行),并且需要:
我在 https://technet.microsoft.com/en-us/library/ms190273(v=sql.110).aspx 中 看到有一个新的 lock_escalation 选项。
例如,这是否允许我在没有表锁的情况下执行以下操作:
例如
ALTER TABLE Protocols set (LOCK_ESCALATION = DISABLE);
go
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
Run Code Online (Sandbox Code Playgroud)
然而,令人担忧的是:
a) LOCK_ESCALATION = DISABLE——它到底是干什么用的,它在这里适用吗?(SQL Server 文档有点薄……也许它只适用于分区表?)
b) LOCK_ESCALATION = DISABLE 是否影响事务大小?(看起来它仍然会创造一笔巨额交易?)
c) LOCK_ESCALATION = DISABLE 甚至会应用并避免表锁定吗?
d) 有没有办法把它分块?(无法想象,但在较新的 SQL 版本中有如此多的新魔法……我应该问一下!)
我正在遍历一个表,试图创建一个动态的 sql 查询。它似乎工作正常,除非我连接结果以制作实际语句。伪代码如下
WHILE (Data is in the table)
BEGIN
SELECT TOP 1 @result = result from table
@sql = @sql + ', ' + @result
END
Run Code Online (Sandbox Code Playgroud)
如果我查看@sql每个循环,我会看到预期的结果,但是当循环完成时@sql是空的。有人可以解释为什么吗?
谁能告诉我为什么这对我不起作用?
CREATE TABLE #UndistributedCmds
(
pendingcmdcount int,
estimatedprocesstime INT
)
INSERT INTO #UndistributedCmds
EXEC sp_replmonitorsubscriptionpendingcmds ...
Run Code Online (Sandbox Code Playgroud)
错误:
消息 8164,级别 16,状态 1,过程 sp_replmonitorsubscriptionpendingcmds,第 152 行
INSERT EXEC 语句不能嵌套。
该错误似乎暗示存储过程定义的第 152 行是问题所在,但我无法理解这一点。这是因为存储过程本身有多个存储过程吗?
我有一张像:
create table x (a varchar(20),
b varchar(30),
c varchar(30),
primary key clustered(a asc))
Run Code Online (Sandbox Code Playgroud)
所以我想知道我是否创建了一个像这样的索引:
Create nonclustered index test on x(a) include (b,c)
Run Code Online (Sandbox Code Playgroud)
该索引将使我使用列 a、b、c 的查询更快?
我正在使用 SQL Server 2008,我发现此解决方案仅适用于 SQL Server 2012 - 在 SQL Server 2008 中格式化电话号码的等效方法是什么?
FORMAT([PhoneField],'###-###-####')
Run Code Online (Sandbox Code Playgroud) sql-server ×10
t-sql ×10
dynamic-sql ×1
identity ×1
index-tuning ×1
optimization ×1
performance ×1
substring ×1
xml ×1