多年前,写
where exists (Select * from some_table where some_condition)
Run Code Online (Sandbox Code Playgroud)
去年我注意到许多 t-sql 脚本切换到使用数字 1 而不是星号
where exists (Select 1 from some_table where some_condition)
Run Code Online (Sandbox Code Playgroud)
WHERE EXISTS (SELECT NULL FROM ...
Run Code Online (Sandbox Code Playgroud)
这是 Oracle 的常见模式吗?哪些是使用这样的东西的性能参数。
在 SQL Server 2005 中,当计划缓存填满时会发生什么?我做了一些研究,从收集的点点滴滴来看,似乎缓存计划被赋予了一个“年龄”,其中包括它的重量或编译成本,乘以自缓存以来运行的次数。随着时间的推移,这个年龄递减,直到它达到 0,当它被认为“老化”并且是需要时冲洗的候选者。当计划缓存填满时,过时的计划将从缓存中刷新。
幕后是否还有其他事情使这种情况复杂化?
谢谢,
马特
我公司有一个工具可以监控服务器、服务、数据库等的状态。我们为我们的客户监控一些现场服务器。执行的一项特别简单的检查是通过查询某些数据库属性的值来确定 SQL Server 数据库是否处于“良好”状态。我们监控的四个数据库属性是:
这是我们使用的查询:
SELECT name AS [SuspectDB],
DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect],
DATABASEPROPERTY(name, N'IsOffline') AS [Offline],
ISNULL(DATABASEPROPERTY(name, N'IsShutdown'), 1) AS [Shutdown],
DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency]
FROM sysdatabases
WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1)
OR (DATABASEPROPERTY(name, N'IsOffline') = 1)
OR (ISNULL(DATABASEPROPERTY(name, N'IsShutdown'), 1) = 1)
OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1)
Run Code Online (Sandbox Code Playgroud)
在测试升级到 SQL Server 2008 时,我们的许多数据库似乎都为IsShutdown属性返回了 1(真)值。SQL Server 2005 以前从未出现过这种情况。该属性的MSDN 文档只是说明“数据库在启动时遇到问题”。
据我所知,数据库非常好。它们已启动,可以查询等。没问题。
是否IsShutdown财产真正的问题对我的监视目的,即,它表明该数据库是在一个糟糕的状态?或者我应该从我的查询中删除它?
注意:在与我们的一位常驻 DBA 交谈时,他们发现在我们的一些新 SQL Server 2008 数据库上,启用IsAutoClose属性的事实可能与这些数据库的 …
我正在批量更新 SQL Server 数据库。我将所有numeric(38,0)列更改为int (是的,SQL Server 脚本是从 Oracle 脚本创建的)。使用 SMO 和 C# (我是一名软件工程师),我设法生成了非常好的脚本,就像SQL Server Management Studio那样。除了一个特定问题外,一切都非常好:
对于少数表格,当我调用ALTER TABLE [myTable] ALTER COLUMN [columnA] INT它时,它决定还将列从NOT NULL to NULL. 这当然是一个大问题,因为我需要为那些特定列上的大多数表重新生成主键。
显然,我有很多选择使用 SMO 来找出哪些列是主键,并在我更新数据类型之后或同时强制它们为 NOT NULL,但我真的很好奇是什么导致了这种情况。
I\xe2\x80\x99m 尝试使用 UDF 作为在检查约束内使用 SELECT 命令的替代方法。我需要对报告表施加约束,以确保signedBy字段是人员记录的PK,该人员记录在auth表中存在一条记录,其人员编号和authType为8(这表明他们有权签署报告)。我的 UDF 应该检查这样的身份验证记录是否存在并返回一个位(如果不存在则返回 0,如果存在则返回 1)。我正在开发 SQL Server Express Edition。
\n我几乎在SQLFiddle重新创建了我的情况:
\nCREATE TABLE personnel(\n personnel INT IDENTITY(1, 1) NOT NULL,\n firstName VARCHAR(20), \n lastName VARCHAR(20),\n login VARCHAR(20) DEFAULT NULL,\n title varchar(20) DEFAULT NULL,\n initials varchar(4) NOT NULL,\n startDate DATE DEFAULT GETDATE(),\n CONSTRAINT PkPersonnel PRIMARY KEY(personnel),\n CONSTRAINT UqPersonnelFirstNameLastName UNIQUE(firstName, lastName),\n CONSTRAINT UqPersonnelInitials UNIQUE(initials)\n);\nCREATE TABLE authType(\nauthType INT NOT NULL IDENTITY(1, 1),\nauthName varchar(50)\nCONSTRAINT PkAuthTypeAuthType PRIMARY KEY(authType)\n);\nCREATE TABLE auth(\nauth INT NOT NULL IDENTITY(1, 1),\npersonnel INT NOT …Run Code Online (Sandbox Code Playgroud) TL;博士; SQL Server 允许标量 UDF 在架构绑定时递归调用自身,但仅在使用语法进行更改时才这样做,这是否是一个错误CREATE OR ALTER?或者是其他语法被禁止的错误?
一个简单的递归标量 UDF 可以构造如下
CREATE FUNCTION dbo.Try1 (@i int)
RETURNS int
AS BEGIN
RETURN IIF(@i = 0, 0, @i + dbo.Try1(@i - 1));
END;
Run Code Online (Sandbox Code Playgroud)
只要这不是架构绑定的,那么这是允许的。
让我们尝试模式绑定它,我们会做
CREATE FUNCTION dbo.Try2 (@i int)
RETURNS int
WITH SCHEMABINDING
AS BEGIN
RETURN IIF(@i = 0, 0, @i + dbo.Try2(@i - 1));
END;
Run Code Online (Sandbox Code Playgroud)
没有。
Cannot find either column "dbo" or the user-defined function
or aggregate "dbo.Try2", or the name is ambiguous
Run Code Online (Sandbox Code Playgroud)
不使用递归创建它然后更改它
CREATE OR ALTER …Run Code Online (Sandbox Code Playgroud) 当我通过 Microsoft SQL Server Management Studio 使用 SQL Server 运行以下查询时,为什么会在本文的标题中出现错误?
-- create the dash_airports table
CREATE TABLE dash_airports
AS ( SELECT [Loc_Id], [ARP_Latitude], [ARP_Longitude], [Facility_Type], [Wind_Indicator]
FROM airportandrunway.dbo.Airports
WHERE [Loc_Id] IN ('09J','14A','18A','1V6','22S','2I0','YKM','YKN') );
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '('.
Run Code Online (Sandbox Code Playgroud)
我按照本指南文章中解决方案 2 的说明进行操作,但它显然不起作用。因此,作为健全性检查,我在 MySQL Workbench 中运行了它,它确实在那里工作了!是什么赋予了?
我有一些体现有向无环图的关系,其中包括类似于以下内容的模式:
我正在寻找一种有效的方法来遍历此图形数据。下面是计算节点 0 的后代的看似简单任务的示例:
DROP TABLE IF EXISTS #edges;
CREATE TABLE #edges(tail int, head int);
INSERT INTO #edges(tail,head) VALUES
(0,1), (5, 6), (10,11), (15,16),
(0,2), (5, 7), (10,12), (15,17),
(1,2), (6, 7), (11,12), (16,17),
(1,3), (7, 8), (11,13), (17,18),
(2,3), (7, 9), (12,13), (17,19),
(2,4), (8, 9), (12,14), (18,19),
(3,4), (8,10), (13,14),
(3,5), (9,10), (13,15),
(4,5), (9,11), (14,15),
(4,6), (14,16);
WITH descendents(node)
AS(
SELECT 0 as node
UNION ALL
SELECT head as node FROM descendents as prior
JOIN #edges …Run Code Online (Sandbox Code Playgroud) 我正在考虑以下场景:
*----------- Physical Processor 0
-*---------- Physical Processor 1
--*--------- Physical Processor 2
---*-------- Physical Processor 3
----*------- Physical Processor 4
-----*------ Physical Processor 5
------*----- Physical Processor 6
-------*---- Physical Processor 7
--------*--- Physical Processor 8
---------*-- Physical Processor 9
----------*- Physical Processor 10
-----------* Physical Processor 11
Logical Processor to …Run Code Online (Sandbox Code Playgroud) 考虑以下最小、完整且可验证的示例代码(请参阅此处的 dbfiddle):
CREATE TABLE [dbo].[test]
(
[i] bigint NOT NULL
identity(1,1)
PRIMARY KEY CLUSTERED
, [d] varchar(10) NOT NULL
);
GO
Run Code Online (Sandbox Code Playgroud)
使用INSTEAD OF INSERT, UPDATE触发器:
CREATE TRIGGER [dbo_test_trigger]
ON [dbo].[test]
INSTEAD OF INSERT, UPDATE
AS
BEGIN
IF ROWCOUNT_BIG() = 0 RETURN;
SET NOCOUNT ON;
MERGE INTO [dbo].[test] [target]
USING [inserted] [source] ON [target].[i] = [source].[i]
WHEN NOT MATCHED THEN
INSERT
(
[d]
)
VALUES
(
[source].[d]
)
WHEN MATCHED THEN
UPDATE
SET [target].[d] = [source].[d];
END; …Run Code Online (Sandbox Code Playgroud)