我可能只是设置我的查询完全不正确,但我需要返回的预期结果集是Nuestra B & Nosotros B因为它们分别属于日期范围。IE Nuestra Bfeeduedate >= '20160301' AND fj.feeduedate <='20160330'和 Nosotros Bfe.ViolationDate >= '20170601' AND fe.ViolationDate <= '20170606'它们就位。
但是,当我运行此查询以尝试返回结果时,我的结果集中返回了 0。
我的查询有什么问题?以下是示例数据和 DDL
CREATE TABLE [dbo].[fei](
[violatorsName] [varchar](500) NOT NULL,
[violationNumber] [varchar](100) NOT NULL,
[violationDate] [date] NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[FJI](
[violatorsName] [varchar](500) NOT NULL,
[VIN] [varchar](100) NOT NULL,
[vfees1] [float] NOT NULL,
[vfees2] [float] NOT NULL,
[vfees3] [float] NOT NULL,
[vfees4] [float] NOT NULL,
[vfees5] [float] NOT NULL,
[vfees6] …Run Code Online (Sandbox Code Playgroud) 正如我发现的那样,您可以在事务中对所需的表设置锁定:
begin tran
select 1 from myTable
with (tablock /*or tablockx to block even reads from table*/, holdlock)
-- do your work
commit tran
Run Code Online (Sandbox Code Playgroud)
但是当我在链接服务器表上运行此代码时,该表仍然可以从链接服务器内访问!为什么?我如何像我的例子一样在这个远程表上设置锁?
我有一个 C# 计划任务,它每晚运行,并包含一个 kill 命令来删除现有数据库,以便可以重新创建它。它大约每周随机生成一次此错误。
杀死数据库失败。用户无权更改数据库“Foo”、数据库不存在或数据库未处于允许访问检查的状态。杀死数据库失败。
使用的C#如下。
srv.KillAllProcesses;
srv.KillDatabase;
Run Code Online (Sandbox Code Playgroud)
所以我已经在尝试终止所有进程。在执行 kill 命令之前是否还有其他检查或命令可以确保它成功执行?这不可能是用户权限问题,因为该操作大部分时间都在工作,那么什么可能导致“未处于允许访问检查的状态”?
我知道问这个问题有点愚蠢,但是否有 Transact-SQL 函数或任何返回所有CONVERT(datetime)样式(格式)的函数?类似的东西fnDateFormats将返回所有日期格式:
输出:
日期格式 | SQL代码 月/日/年 101
等等。
我使用以下语句来监视 SQL Server 中的活动(这是出自某本书)
SELECT
des.session_id ,
des.status ,
des.login_name ,
des.[HOST_NAME] ,
der.blocking_session_id ,
DB_NAME(der.database_id) AS database_name ,
der.command ,
des.cpu_time ,
des.reads ,
des.writes ,
dec.last_write ,
des.[program_name] ,
der.wait_type ,
der.wait_time ,
der.last_wait_type ,
der.wait_resource ,
CASE des.transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END AS transaction_isolation_level ,
OBJECT_NAME(dest.objectid, der.database_id) AS OBJECT_NAME ,
SUBSTRING(dest.text, der.statement_start_offset / 2,
( CASE …Run Code Online (Sandbox Code Playgroud) 我们组织中有几个 Microsoft SQL 服务器,以前的 DBA 没有对其中任何一个进行用户审查,因此有些服务器上充满了不活动的本地用户。我有一个查看他们上次登录日期的脚本:
SELECT MAX(login_time) AS [Last Login Time], login_name [Login]
FROM sys.dm_exec_sessions
GROUP BY login_name
ORDER BY [Login] ASC;
Run Code Online (Sandbox Code Playgroud)
但是我如何创建一个类似的脚本来列出用户所做的所有工作和报告,以便在我删除非活动用户时它们不会停止工作?从 Microsoft SQL Server 中删除用户时是否有任何最佳做法?
我有一张保存付款数据的表。我想将以拒绝状态结束的订单插入#tmp_Declined。然后,我想将最初被拒绝但在使用替代付款方式时获得授权的付款插入 #tmp_Authorized。
我可以使用 2 个 select into 语句来做到这一点,其中 where 子句略有不同,但使用相同的基表。
我考虑了一个类似下面的例子:
select *
into #tmp_Declined
from Payments
except
select *
from Payments
where WasOrginallyDeclined = 1
and MostRecentPaymentAccepted = 1
Run Code Online (Sandbox Code Playgroud)
这种方法虽然仍然会在某个时间填充一个临时表。是否有保留字或查询“技巧”将插入#tmpA 中满足条件,然后插入#tmpB 中未插入#tmpA 中的任何内容?
我希望能够通过一个事务写入 2 个表。
任何想法,为什么以下查询中的第一个返回带有 -1,NULL 的行,尽管它有一个WHERE 1=2?
只有当我将查询放入另一个子查询时,它才能正常工作(并返回一个空的结果集)。
在 Microsoft SQL Server 2014 和 2016 上测试
DECLARE @i INT = 1
SELECT @i i, MAX(sub.id) mid
FROM (SELECT TOP(@i) x.id
FROM (VALUES(1), (2), (3), (4)) x(id)
WHERE x.id > 2 + @i
ORDER BY x.id) sub
WHERE 1 = 2
SELECT s1.i, s1.mid
FROM (
SELECT @i i, MAX(sub.id) mid
FROM (SELECT TOP(@i) x.id
FROM (VALUES(1), (2), (3), (4)) x(id)
WHERE x.id > 2 + @i
ORDER BY x.id) sub
) …Run Code Online (Sandbox Code Playgroud) 我在 SQL Server 2008R2 中有一个查询,我想针对计算列运行该查询,而我又要对计算列进行索引 - 以加快速度。
该列现在是 int 类型。
我无法正确使用语法。
alter table dbo.tOutput Add StateNew as State IN (0, 10)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
Incorrect syntax near the keyword 'IN'.
Run Code Online (Sandbox Code Playgroud)
来自 C# 实体框架的查询应该稍后使用索引并且 - 很好 - 很快。
C#好像改成IN用法了,原来是这样的:
tOutput.Where(x => (x.State == 0) || (x.State == 10))
Run Code Online (Sandbox Code Playgroud)
生成的 SQL 读取
.. FROM tOutput WHERE State IN (0, 10) ..
Run Code Online (Sandbox Code Playgroud) 我在我的 SSMS 中注册了一堆 SQL Server,有很多不同的 SQL 版本、版本和数据库兼容性。
我想看看是否所有这些服务器有任何的sp_Blitz或sp_WhoIsActive安装的存储过程,以及哪个版本它们。
我知道我可以右键单击我的注册服务器组并打开一个连接到组中所有服务器的查询窗口,但是有没有一种可靠的方法来检查我拥有哪些 SProc 和版本?