标签: update

SQL Server如何将大json上传到列中,性能问题

当 nvarchar(max) 列只有几 MB 数据时,我在表上的单行插入/更新语句上遇到性能不佳的情况。

这是我的表结构:

CREATE TABLE [dbo].[tbl_set_Cart](
    [ID] [int] NOT NULL,
    [AS400_CUSTOMER_COD] [nvarchar](50) NOT NULL,
    [AS400_LISTIN] [int] NOT NULL,
    [VALUE] [nvarchar](max) NOT NULL,
    [DELIVERY_COSTS] [nvarchar](max) NOT NULL,
    [ITEMS_COUNT] [int] NOT NULL,
    [ITEMS] [nvarchar](max) NOT NULL,
    [KIND] [int] NOT NULL,
    [CHECKOUT_INFO] [nvarchar](max) NOT NULL,
    [ISSUES] [nvarchar](max) NOT NULL,
    [LAST_CHECK] [datetime] NOT NULL,
    [USER_ID] [int] NOT NULL,
    [IMPERSONATED_USER_ID] [int] NOT NULL,
    [OVERRIDE_PRICES] [bit] NOT NULL,
    [HAS_ISSUE] [bit] NOT NULL,
    [IS_CONFIRMED] [bit] NOT NULL,
    [IS_COLLECTED] [bit] NOT NULL,
    [_METADATA] [nvarchar](max) NOT …
Run Code Online (Sandbox Code Playgroud)

sql-server update json performance-tuning

1
推荐指数
1
解决办法
1996
查看次数

如果出现死锁异常,我可以重试每个 SQL 查询吗 (MSSQL)

在发生死锁异常时重试 SQL 查询是否总是安全的?这会导致意外行为或执行操作两次吗?我认为死锁异常总是意味着回滚,即使查询不在显式定义的事务中运行。

sql-server deadlock query update

1
推荐指数
1
解决办法
3200
查看次数

带有和不带有 SELECT 关键字的 UPDATE 语句

我一直在做一些关于SELECT从这个更新中删除关键字的测试:

Update  #tmpDriverTime
Set     WorkDay2 = (Select IsNull(Sum(PyblHrs),0)
From    spr_DriverTimeEntry
Where   spr_DriverTimeEntry.DrvrID = #tmpDriverTime.EmployeeNo
And     Convert(Varchar(12),dtwrkd,112) = Convert(Varchar(12),@StartDate_1,112))
Run Code Online (Sandbox Code Playgroud)

从我所做的测试来看,无论是否有SELECT关键字,都返回了相同的数据。我由我们的 DBA 运行代码以获得他删除SELECT语句的批准,他说我不能,因为删除SELECT语句会导致更新以不同的方式工作,但他无法阐明它的工作方式有何不同。我已经对新的进行了一些搜索,并找到了一些 MSDN 页面,他们在其中运行UPDATE FROM没有SELECT关键字的命令。所以现在我很困惑,我在 MSDN 上找到的测试和其他示例说我可以删除SELECT关键字,但我的 DBA 说不。删除SELECT关键字是否会影响UPDATE FROM工作方式,如果会,它会如何影响它?

sql-server-2005 sql-server t-sql update

0
推荐指数
1
解决办法
1116
查看次数

更新行的性能

在 SQL Sever 中更新时,我的理解是删除整行然后重新创建(这就是您获得新时间戳的原因)。那么,如果您更新 1 个字段或 500 个字段,更新的性能是否会发生变化?

我怀疑如果有索引列,因为它必须更新索引,服务器会执行更多的“工作”。回答时,假设没有触发器。

performance sql-server t-sql update query-performance

0
推荐指数
1
解决办法
100
查看次数

SQL Server 2008 R2 服务包

SQL Server 服务包是“累积”还是“增量”?

场景是我们有几个实例在 SQL Server 2008 R2 RTM 上运行,我们被要求将其修补到 SP3 级别。我不确定我是只应用 SP3 还是需要做 SP1 - SP2 - SP3

sql-server update

0
推荐指数
1
解决办法
678
查看次数

遍历表中的所有记录并在 SQL Server 中编辑列

如何遍历 SQL Server 表中的所有行并编辑列?你知道的:

  • 跳过了很多ID。
  • creatie每次一分钟都必须对该列进行编辑。所以第一个必须是 15:00:00,第二个 15:01:00,第三个 15:02:00 等等。
  • 总共有 54 条记录。
  • 我使用的是 SQL Server 2014 Express 版本

我使用了下面的查询,但最大 ID 是 24697...所以循环很长。

declare @var datetime = '2015-10-19 0:0:0';
declare @counter int = 1;
declare @max int = (select max(id) from topic);

while (@counter <= @max) begin
    update Topic set Creatie = Creatie + @var where id = @counter;
    set @counter += 1;
    set @var += '0-0-0 0:1:0'
end;
Run Code Online (Sandbox Code Playgroud)

因为我每次都这样做@var += '0-0-0 0:1:0',我不知道 24697 次后的结果是什么(如果它有效)。

这是前 25 …

sql-server update sql-server-2014

0
推荐指数
1
解决办法
2万
查看次数

如果不存在则更新语句

如果我有一个包含 2 列的简单表和一个由两列组成的复合主键,我该如何重命名其中一列,但前提是它不会导致主冲突?

这是一个简化的示例。

拿下表:

User  | Role
------|----------------
Joe   | User
Joe   | Administrator
Brian | User
Anna  | Administrator
Anna  | Admin
Run Code Online (Sandbox Code Playgroud)

假设我想编写以下查询:

UPDATE UserRoles Set Role = 'Admin' WHERE Role = 'Administrator'
Run Code Online (Sandbox Code Playgroud)

在不使用游标的情况下,如何更改 SQL 更新语句以避免重命名 Anna(因为该用户已经具有 Admin 角色),但仍重命名 Joe?

甚至可以使用基于集合的 SQL 还是使用游标是唯一的方法?

谢谢。

sql-server t-sql update sql-server-2014

0
推荐指数
1
解决办法
2万
查看次数

更新分组记录

我有以下查询返回重复值:

  SELECT 
    [t].[Field1], [t].[Field2], COUNT([t].[Field2]) 
  FROM [dbo].[Table1] AS [t]
  WHERE [t].[Field2] <> ''
  GROUP BY [t].[Field1], [t].[Field2]
  HAVING COUNT([t].[Field2]) > 1
Run Code Online (Sandbox Code Playgroud)

鉴于该声明,我想编写更新声明以Field2在这些条件下清除。我会怎么写这个?

sql-server duplication update

0
推荐指数
1
解决办法
49
查看次数

更改日期精度值

说明:我有一个日期格式为“mm/dd/yyyy”的 oracle 数据库表和一个包含日期列的唯一约束。我的问题是我似乎无法找到更改内部日期格式的方法,我需要深入到第二个(即“mm/dd/yyyy hh12:mi:ss”)。我不想更改输出格式的查询,我想更改要更新的存储值。

问题:甚至可以将数据库精度降低到秒吗?如果是这样,我假设它是更新或更改命令?

date-format alter-table update oracle-12c

0
推荐指数
1
解决办法
285
查看次数

在 sql server 中更新大表中的行

我想更新一个有 83,423,460 行并且还在增长的大表。

以下查询需要 8 分钟才能成功执行:

 UPDATE FPP_Invoice_Revenue
 SET    Till_Prev_Inv_Amt = Till_Prev_Inv_Amt_In_USD / 0.0285714286,
        Cur_Inv_Amt = Cur_Inv_Amt_In_USD / 0.0285714286,
        YTD_Inv_Amt = YTD_Inv_Amt_In_USD / 0.0285714286
 WHERE  SOW_Number = '20014378'
Run Code Online (Sandbox Code Playgroud)

存在一个clustered index。我想在更新之前禁用该索引,并在更新后再次重建,但这也不起作用,因为重建需要很多时间。

我在某处读过这可以通过分成小部分来实现,但是如何划分上述查询?

DDL:

CREATE TABLE [dbo].[FPP_Invoice_Revenue](
[Project_Code] [varchar](10) NOT NULL,
[Project_Desc] [varchar](50) NULL,
[SOW_Number] [varchar](10) NOT NULL,
[SOW_Desc] [varchar](50) NULL,
[Invoice_No] [varchar](50) NOT NULL,
[Inv_Month] [int] NOT NULL,
[Inv_Year] [int] NOT NULL,
[Billing_Date] [smalldatetime] NULL,
[Doc_Currency] [varchar](10) NULL,
[Vertical] [varchar](255) NULL,
[Till_Prev_Inv_Amt] [numeric](24, 10) NULL,
[Cur_Inv_Amt] [numeric](24, 10) NULL, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server update query-performance

0
推荐指数
1
解决办法
2万
查看次数