在学习如何从前一周(例如从前一周的星期一的日期)获取星期几的日期时,我发现以下两个表达式很常见,您可以在其中更改最后一个数字(例如 0=星期一)取决于您想要的那一天:
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
SELECT DATEADD(wk, DATEDIFF(wk, 7, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
2017-05-29当我今天(2017-06-17)运行它时,两者似乎都返回了正确的日期。
我的问题是 - 这是如何工作的?似乎是在数周后6或7数周后1900-01-01?为什么它同时适用于 a6和7?
此外,是否存在需要注意的边缘情况,它可能无法提供预期结果?
想象一下,我正在通过管理工作室运行多个批次,由 GO 命令分隔。我想知道隐式事务的行为方式 - 事务是按批次提交还是在整个执行过程中提交一次。
在我的办公室,有人更改了用户对生产数据库的权限。所以在那之后我决定写一个 ddl 类型的触发器来审计权限更改。我已经用谷歌搜索了这个,但我找不到合适的解决方案。那么你们可以给我推荐几个链接或任何示例代码吗?
我想捕获谁更改了权限以及何时更改了权限。
提前致谢。
如果 SQL 服务器中的字符串中存在,我想单独删除行尾的点。
例子:
ABC Private's co., ltd.
Run Code Online (Sandbox Code Playgroud)
所需输出:
ABC Private's co., ltd
Run Code Online (Sandbox Code Playgroud) 我在一个新职位上,被告知要实现一个存储过程,该过程将接受用户 ID 列表并更新一个标志。
当我建议使用表值参数(数组模拟)时,我被告知要实现如下所示,因为这是以前的做法。我不是 DBA,但我是一名全栈开发人员,这对我来说很有趣。
仅供参考 - 用户 ID 实现为类型 int
CREATE PROCEDURE [dbo].[UpdateUsers]
@rgIDs varbinary(max) -- contains several ids
AS
DECLARE @tblTmp TABLE (ID int PRIMARY KEY)
DECLARE @ich int, @cch int, @ID int
SET @cch = DATALENGTH (@rgIDs)
SET @ich = 1
WHILE (@ich < @cch)
BEGIN
SET @ID = SUBSTRING (@rgIDs, @ich, 4)
UPDATE dbo.Users u
SET isUpdated = 1
WHERE u.ID = @ID
SET @ich = @ich + 4
END
Run Code Online (Sandbox Code Playgroud)
不是表值类型在这里工作得更好吗?更具可读性、性能、更不容易出错等......?
我相信我将使用 SQL Server 2012 或 …
我有两张桌子,Message和BlockUser。
表Message:
ID | Message | DateCreated
1 | M1 | 2017-09-20 13:00:00
2 | M2 | 2017-09-20 14:00:00
3 | M3 | 2017-09-21 13:00:00
4 | M3 | 2017-09-22 13:00:00
5 | M3 | 2017-09-23 13:00:00
6 | M3 | 2017-09-24 13:00:00
7 | M3 | 2017-09-25 13:00:00
Run Code Online (Sandbox Code Playgroud)
表BlockUser:
BlockStartDate | BlockEndDate
2017-09-21 13:00:00 | 2017-09-22 13:00:00
2017-09-24 13:00:00 | 2017-09-24 14:00:00
Run Code Online (Sandbox Code Playgroud)
现在我想要Message排除那些与BlockUser. 所以对于我的例子,结果应该是:
ID | Message …Run Code Online (Sandbox Code Playgroud) 表列中的示例数据,数据类型NVARCHAR(MAX)。此数据由扩展事件跟踪捕获由实体框架生成的数据库调用收集。
exec sp_executesql N'SELECT TOP (2)
[Extent1].[ccusqcode] AS [ccusqcode],
[Extent1].[ccusname] AS [ccusname],
[Extent1].[ccusfirstname] AS [ccusfirstname],
[Extent1].[ccuslastname] AS [ccuslastname],
[Extent1].[dbirthday] AS [dbirthday],
[Extent1].[ccellphone] AS [ccellphone],
[Extent1].[cdriverlicense] AS [cdriverlicense],
[Extent1].[csocsecno] AS [csocsecno],
[Extent1].[dfirstvisit] AS [dfirstvisit],
[Extent1].[dlastvisit] AS [dlastvisit],
[Extent1].[nmtdrxcount] AS [nmtdrxcount],
[Extent1].[lduplabel] AS [lduplabel],
[Extent1].[cemployerid] AS [cemployerid],
[Extent1].[mnotes] AS [mnotes],
[Extent1].[cemployercontact] AS [cemployercontact],
FROM [dbo].[customer] AS [Extent1]
WHERE ([Extent1].[cusid_PK] = @p__linq__0) AND ([Extent1].[pharminfoid_FK] = @p__linq__1)',N'@p__linq__0 bigint,@p__linq__1 bigint',@p__linq__0=NULL,@p__linq__1=1
Run Code Online (Sandbox Code Playgroud)
我想使用LIKE运算符查找所有带有 text 的行FROM [dbo].[customer]。
SELECT *
FROM [dbname].[schemaName].[tableName]
WHERE …Run Code Online (Sandbox Code Playgroud) 你有没有解释一下,为什么查询优化器在这个例子中选择了不同的索引和模式?
/* crete objects and data for testing */
-- table
CREATE TABLE #Test (
ID INT IDENTITY PRIMARY KEY
,CustNo INT NULL
,CustNo2 INT NULL
);
-- populate with data
WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A CROSS JOIN …Run Code Online (Sandbox Code Playgroud) 我在执行正常的 SP 中有以下查询:
SELECT * FROM MyTable u
ORDER BY
u.[Id] DESC
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
但是,当我从 SP 参数配置 ORDER BY 时,查询从以毫秒为单位执行到几秒:
SELECT * FROM MyTable u
ORDER BY
CASE WHEN @Sort = 0 THEN u.[Id] END DESC,
CASE WHEN @Sort = 1 THEN u.[Id] END ASC,
CASE WHEN @Sort = 2 THEN u.[LastName] END ASC,
CASE WHEN @Sort = 3 THEN u.[LastName] END DESC
OFFSET @PageSize * (@PageNumber - 1) ROWS …Run Code Online (Sandbox Code Playgroud) 嗯,这个问题是众所周知的,但如果有的话,我正在寻找一个更聪明的解决方案。
出于某种原因,系统无法识别某些字符,我无法比较列
下面是一个文本示例:
对
ASPIRADOR ULTRASSONICO-LOCAÇAO (NOTA FISCAL SERVIÇO)
错误的
ASPIRADOR ULTRASSONICO-LOCA€AO (NOTA FISCAL SERVI€O)
其实我是通过这个功能来解决这个问题的
create function fixcollation(@ps_Texto VARCHAR(4000)) returns VARCHAR(4000)
as
begin
declare @vlgsv1itu INT declare @nxn68ezzi INT declare @dw17rsyva VARCHAR(50) declare @iw8a2z01i VARCHAR(50) declare @t64e98xq6 VARCHAR(50) declare @zwjs2imy3 INT declare @jsyt85sy8 VARCHAR(4000)
----------------------------------------------------
set @dw17rsyva = ' …ƃ„µ·Ç¶Ž‚Šˆ‰ÔÒÓ¡‹ÖÞØ¢•ä“”àãå♣—–éëꚇ€§'
set @iw8a2z01i = 'áàãâäÁÀÃÂÄéèêëÈÉÊËíìïÍÌÏóòõôöÓÒÕÔÖúùûüÚÙÛÜçǺØ'
set @jsyt85sy8 = @ps_Texto set @zwjs2imy3 = IsNull(datalength(@ps_Texto), 0)
set @nxn68ezzi = 1
while(@nxn68ezzi <= IsNull(datalength( @ps_Texto), 0))
begin
set @vlgsv1itu = 1
while(@vlgsv1itu <= …Run Code Online (Sandbox Code Playgroud) sql-server ×10
t-sql ×10
array ×1
collation ×1
datetime ×1
encoding ×1
optimization ×1
parameter ×1
transaction ×1