我需要从我们的生产数据库更新测试环境中的一些表。基本上是同一张表,只是更新了几个月。
所以,这是我试图实现的一个查询:
UPDATE [Server-DEV].[Database].[dbo].[bHRRM]
SET [Field1] = b.[Field1],
[Field2] = b.[Field2], ... ,
[FieldX] = b.[FieldX]
FROM [Server-PROD].[Database].[dbo].[bHRRM] AS b
Run Code Online (Sandbox Code Playgroud)
我不关心数据被覆盖,因为它是一样的。即使相反也是如此 - 如果有差异,最好测试服务器进行相应更新。但我不想要重复的。
KeyID现在,如果包含列,则存在问题。即使我将其排除在SET- 之外,仍然存在错误:
无法在具有唯一索引“biHRRM”的对象“dbo.bHRRM”中插入重复的键行。重复的键值为 (5, 1000)。
所以,第一个问题是——我做错了什么?
是否可以以编程方式确定特定 SQL Server 实例支持的最高兼容性级别,或者至少将数据库级别设置为实例的默认级别,而无需事先知道那是什么?
这里的动机是我之前将所有数据库设置为较早的兼容性级别。现在我想将它们迁移到更高的级别以从新功能中受益,但我不想破坏那些碰巧仍在运行旧版 SQL Server 版本的客户的事情。
ALTER DATABASE会让我选择一个特定的兼容性级别,例如 150,但我看不到一种方法来将其设置为实例的默认级别,或者确定支持的最高级别,除非可能通过一些涉及解析版本号的 hack (虽然这看起来不是特别可靠)。
在 SQL Server 数据库中,我有一个包含一DateTime列的表,我想获取特定日期的行。
我发现了很多选择,例如:
WHERE myColumn BETWEEN '2020-10-10T00:00:00.00' AND '2020-10-10T23:59:59.999'WHERE CAST(myColumn AS date) = '2020-10-10'WHERE date LIKE '%2020-10-10%'...
其中哪一个最快?
给定每个角色一行的结果集,如何设置三个变量,例如 IsAdmin、IsSuperUser、IsUser。
我尝试过这个,但它太难看了。我想只用一个查询来完成同样的任务。我知道如何将它们组合成一个包含三个子查询的查询,但如果可能的话,我想只使用一个查询。
declare @IsAdmin bit, @IsSuperUser bit, @IsUser bit
select RoleId into #CallerRoles from AspNetUserRoles aur where aur.UserId = @CallerUserId
set @IsAdmin = case when exists (select * from #CallerRoles where RoleId = 1) then 1 else 0 end
set @IsSuperUser = case when exists (select * from #CallerRoles where RoleId = 3) then 1 else 0 end
set @IsUser = case when exists (select * from #CallerRoles where RoleId = 5) then 1 else 0 end
Run Code Online (Sandbox Code Playgroud) 我需要对 T-SQL 联合查询进行排序。无论我如何编写查询,一旦引入该ORDER BY子句,我都会收到语法错误。
关键字“order”附近的语法不正确
WITH s1
AS (select '1' as id
union
select '4' as id
union
select '2' as id
union
select '3' as id
union
select '5' as id
),
s2
AS (select '4' as id,
100 as val
union
select '1' as id,
500 as val
union
select '3' as id,
700 as val
union
select '2' as id,
800 as val
)
(select '9' as id,
700 as val) -- id 9 …Run Code Online (Sandbox Code Playgroud) 我有以下代码。我想要时间格式为 '23:59:59' 而不是 '00:00:00' 的第二个(截止)日期。请问如何实现这一点?
declare @Date datetime
declare @StartDate datetime
declare @EndDate DateTime
set @date = GetDate()
Set @StartDate = DATEADD(M, DATEDIFF(M,0,@date),0)
set @EndDate = DATEADD(DD,DATEDIFF(DD,0, @date),0)
select @StartDate,@EndDate
Run Code Online (Sandbox Code Playgroud) 我的客户正在使用表格来创建每月的财务报告。我对其进行了优化,因为大约有 40 个聚合列,并且它运行了大约 40 分钟才能看到输出。我创建了一个将聚合值存储到表中的流程,现在,在选择列时,聚合已经计算完毕,并且运行时间为 3-4 分钟。现在我正在尝试创建一个索引,但由于数据量很大(我猜)SQL Server 没有使用它。查询非常简单
Select *
From Table
Where year(data_doc) = 2023
and month(data_doc) = 10
Run Code Online (Sandbox Code Playgroud)
我仅为“data_doc”列创建了非聚集索引,但 SQL Server 仍然扫描整个表。我更改了索引并包含了构成主键的列,如下所示:
CREATE INDEX ix_Data_Doc ON Tabel(data_doc,OperationDetail_Id, OperationTraceOut_Id,OperationTraceIn_Id).
Run Code Online (Sandbox Code Playgroud)
重要的是,客户端正在使用视图,并且“select * from view”返回大约 5700 万行,总共有 57 列。每年和每月使用过滤器,它会返回大约 2/3 百万行。列“data_doc”数据类型为“datetime”。
如何创建索引来优化流程?
我有一个名为 tab_stores 的表,它的结构如下所示
CREATE TABLE tab_stores
(
id_num INT IDENTITY(1, 1),
sName VARCHAR(20),
mySKey VARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)
现在,当我使用下面的查询在此表中插入值时,它会插入值并增加id_num+1,这工作正常。
INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store');
Run Code Online (Sandbox Code Playgroud)
插入的数据是
1,Store,Store
Run Code Online (Sandbox Code Playgroud)
我想稍微修改一下,以便当我插入行时,自动递增的列值应该被后固定并添加到mySKey列中,所以结果应该是
1,Store,Store1
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的查询,但它不起作用 - 我得到
消息 207,级别 16,状态 1,服务器 49706b09f367,第 7 行
无效的列名称“id_num”
INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store' + id_num);
Run Code Online (Sandbox Code Playgroud)
谁能帮帮我吗?谢谢
我在 SQL Server 中编写了一个存储过程来检查数据是否存在于几个表中,如果不存在则查询将失败,但如果数据存在则它将在表 3 中插入一些数据。但我看到我得到了一个我通过变量传递的数据库名称错误。以下是错误消息。
消息 208,级别 16,状态 1,第 65 行
无效的对象名称“EMR-Integration-DEV.dbo.EMR_ADF_Variables_test”
这是我的存储过程:
CREATE PROCEDURE InsertData
@Client_Id INT,
@EMR_Id INT,
@Client_Name NVARCHAR(255),
@EMR_Name NVARCHAR(255),
@DB_Name NVARCHAR(255)
AS
BEGIN
DECLARE @Full_Table_name NVARCHAR(255);
SET @Full_Table_name = @DB_Name + '.dbo.Variable_Table_Name';
-- Check if values exist in tables in the Reference database
IF NOT EXISTS (SELECT 1 FROM Dim.Client_table WHERE ClientId = @Client_Id AND StagedName = @Client_Name)
BEGIN
PRINT 'Error: Client does not exist.';
RETURN;
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[EMR] …Run Code Online (Sandbox Code Playgroud) 我有这样的疑问:
SELECT
t.[DataTran]
,t.[Dok]
,t.[Product]
,p.idxbox
,po.[Mark]
,po.[Model]
,(SELECT
TOP(1) [poz_La]
FROM [RaportyAutko].[dbo].[G_API_Data]
WHERE
idxbox= p.idxbox
AND DATEDIFF(second,{d '1970-01-01'}, [dataandtime]) < DATEDIFF(second,{d '1970-01-01'},t.[DataTran])
AND [distance]<>0
ORDER BY dataandtime DESC) AS [poz_La]
,(SELECT
TOP(1) [poz_Lo]
FROM [RaportyAutko].[dbo].[G_API_Data]
WHERE
idxbox= p.idxbox
AND DATEDIFF(second,{d '1970-01-01'}, [dataandtime]) < DATEDIFF(second,{d '1970-01-01'},t.[DataTran])
AND [distance]<>0
ORDER BY dataandtime DESC) AS [poz_Lo]
,(SELECT
TOP(1) [adress]
FROM [RaportyAutko].[dbo].[G_API_Data]
WHERE
idxbox= p.idxbox
AND DATEDIFF(second,{d '1970-01-01'}, [dataandtime]) < DATEDIFF(second,{d '1970-01-01'},t.[DataTran])
AND [distance]<>0
ORDER BY dataandtime DESC) AS [adress]
,
(SELECT
TOP(1) …Run Code Online (Sandbox Code Playgroud) sql-server ×10
t-sql ×10
sql ×7
dynamic-sql ×1
identity ×1
indexing ×1
insert ×1
sql-order-by ×1