我想像这样创建 INSTEAD OF 触发器:
CREATE TRIGGER [dbo].[DeleteCompany]
ON [dbo].[Company]
INSTEAD OF DELETE
AS
DECLARE @CompanyID int
SELECT @CompanyID = deleted.CompanyID FROM deleted
BEGIN TRAN
DELETE FROM Project WHERE CompanyID = @CompanyID
DELETE FROM CompanyPerson WHERE CompanyID = @CompanyID
UPDATE PersonCompany SET CompanyID = null WHERE CompanyID = @CompanyID
DELETE [Company]
FROM DELETED D
INNER JOIN [Company] T ON T.CompanyID = D.CompanyID
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
因此,我可以确定,这些操作是一个原子操作。但这有意义还是 TRIGGER 总是在事务内执行?
另外,如果公司在另一个触发器中被删除,会发生什么情况,如下所示:
CREATE TRIGGER [dbo].[DeleteSecurityLevel]
ON [dbo].[SecurityLevel]
INSTEAD OF DELETE
AS
DECLARE @SecurityLevelID int
SELECT …Run Code Online (Sandbox Code Playgroud) 主题:
我每个月都会创建一份报告。报告的创建包括两个步骤:
在过去的几个月里,我在手动模式下创建了报告。现在我想自动化这些东西。但这里有一个
问题:
第二步(解析 XML 和文件创建)运行起来很有魅力,但第一步我观察到了奇怪的行为。
我得到了获取 XML 的存储过程:
ALTER PROCEDURE [Structure].[GetXML]
@LastActDate date,
@CurActDate date
AS
BEGIN
SET NOCOUNT ON;
begining:
DECLARE @URI varchar(2000),
@methodName varchar(50),
@objectID int,
@hResult int,
@setTimeouts nvarchar(255),
@serv nvarchar(255) = 'http://example.com/docs/',
@result nvarchar(max) = ''
DECLARE @t TABLE(Resp nvarchar(max))
declare @timeStamp nvarchar(50) = convert(nvarchar(50),CURRENT_TIMESTAMP,127)
declare @CurDate date = dateadd(day,0,getdate())
--EXEC @hResult = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @objectID OUT
EXEC @hResult = sp_OACreate 'MSXML2.XMLHTTP', @ObjectID OUT
SELECT @URI …Run Code Online (Sandbox Code Playgroud) 我搜索并找到了这篇关于 SQL Server 中临时表的文章,因为我在我们的一个存储过程中遇到了一行说:
SELECT Value SomeId INTO #SomeTable FROM [dbo].[SplitIds](@SomeIds, ';')
Run Code Online (Sandbox Code Playgroud)
我知道它#SomeTable是tempdb作为临时表存储的。但是,我不明白为什么我们不必先使用,CREATE TABLE #SomeTable因为它是在提到的文章中写的。我们的代码运行良好,我只是不明白为什么使用SELECT ... INTO #SomeTable. CREATE TABLE #SomeTable一开始加的话会有什么后果?我们会得到性能上的任何差异吗?该表会存储在另一个位置吗?
我在同一个数据库中有两个具有相同列结构的表:TableA和TableB.
TableA没有任何索引,但TableB有一个非聚集唯一索引。
TableA有 2.9 亿行数据需要复制到TableB.
由于它们都具有相同的结构,我已经尝试过
INSERT INTO TableB
SELECT *
FROM TableA;
Run Code Online (Sandbox Code Playgroud)
它执行了几个小时,并产生了一个巨大的日志文件,填满了磁盘。结果磁盘空间不足,查询被终止。
我可以缩小日志文件。如何有效地将这些多行数据复制到另一个表?
我创建了一个带有 SQL Server 2014 后端的 C# 应用程序。我只是打算为自己使用该应用程序,但现在我对其他用户产生了兴趣。我从来没有考虑过将用户 ID 添加到任何表中,我的问题是如何生成一个脚本来向所有表添加一个 uniqueid 列。我不想为每个用户创建一个新数据库,并且希望每个表都有一个唯一的用户列。
我有任意金额要花,比如说 1000 美元
我也有几十行,假设员工以他们的工资为一列
我如何按优先级顺序在员工之间分配 1000 美元的预算,以便他们每个人都获得工资列中的值,直到钱都花完?一旦预算全部用完,其余的员工就会剩下零。
Employee, Rank, Salary
John, 1, 500$
Anne, 2, 400$
Rob, 3, 300$
Bill, 4, 200$
Run Code Online (Sandbox Code Playgroud)
结果应该是:
John, 1, 500$, 500$
Anne, 2, 400$, 400$
Rob, 3, 300$, 100$ --Only 100 left in the budget
Bill, 4, 200$, 0$
Run Code Online (Sandbox Code Playgroud)
知道如何在没有光标的情况下做到这一点吗?
我的表格有四列,如下所示
表 - 订阅有这样的数据
part_id subscription policylicense enterpriselic
part1 sub1 null null
part2 sub1 pl1 null
part3 sub1 null enterpr1
Run Code Online (Sandbox Code Playgroud)
我想得到下面这样的数据
part_id subscription license
part2 sub1 pl1
part3 sub1 enterpr1
Run Code Online (Sandbox Code Playgroud)
如何将合并的许可证数据放入一列,在同一个表中留下空值..我在这里使用 sql server
任何人都可以帮助解决这个问题,这将非常感谢我.. 提前非常感谢..
有一张这样的桌子:,
name ZK04_COUNT ZK05_COUNT ZK04_PRICE ZK05_PRICE
A 15 0 150.00 0
A 0 20 0 223.00
B 11 0 75.00 0
B 0 24 0 250.00
Run Code Online (Sandbox Code Playgroud)
我正试图将它转变成这样的:
name ZK04_COUNT ZK05_COUNT ZK04_PRICE ZK05_PRICE
A 15 20 150.00 223.00
B 11 24 75.00 250.00
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
SELECT *
FROM (
SELECT
r.name
,r.AUART
, CASE WHEN r.AUART = 'ZK05' THEN count(r.MATNR) ELSE '' END AS ZK05_COUNT
, CASE WHEN r.AUART = 'ZK04' THEN count(r.MATNR) ELSE '' END AS ZK04_COUNT
, CONVERT(money, sum(CAST(netpr as …Run Code Online (Sandbox Code Playgroud) 我有一个这样的查询:
select key, name from localtab where key not in (select key from remotetab);
Run Code Online (Sandbox Code Playgroud)
查询需要永远,我不明白为什么。
localtab是本地表,remotetab是另一台服务器中的远程表。key是int在两个表中都有唯一索引的列。当我分别查询两个表时,只需几秒钟。
我知道如何将负值设置为零:
select case when (formula) < 0 then 0 else (formula) end as result from tab
Run Code Online (Sandbox Code Playgroud)
但是如果“公式”是一个很长的公式呢?然后我必须输入两次。有没有办法在不输入两次公式的情况下获得相同的结果?
我的实际情况是这样的:
select
sum
(
case when
(t1.x + t2.x + t3.x) * t4.p - (t5.x + t6.x + t7.x) * t8.p ) < 0
then 0
else
(t1.x + t2.x + t3.x) * t4.p - (t5.x + t6.x + t7.x) * t8.p )
end
) as result
from
t1
left join t2 on t1.x = t2.x
left join t3 on t1.x = t3.x …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql-server-2014 ×10
sql ×3
t-sql ×3
c# ×1
case ×1
pivot-table ×1
temp-tables ×1
triggers ×1