如果我将 jdbc 隔离级别设置为在 SQL Server 中读取未提交,SQL Server 会锁定任何表、页、行等吗?
谢谢。
我有一个 21 列的表。大多数是数字,其余的是nvarchar。
我需要添加 4 列,这些列将包含每行的 XML 数据。每行的 XML 数据可以是 200 到 2,000 行。
问题是:
将 XML 类型的列添加到同一个表是否会改变查询该表的速度?
当我将 xml 类型的列添加到另一个表并在执行查询时连接两个表时,有什么性能优势?
对 XML 数据进行编码以缩小它并在应用程序中对其进行解码是否更好?
有时我的存储过程看起来像
create procedure handle_data
@fk int,
@value varchar(10)
as
begin
if exists (select * from my_table where id = @fk)
begin
update my_table
set value = @value
where id = @fk
end
else
begin
insert into my_table (fk, value)
select @fk, @value
end
end
Run Code Online (Sandbox Code Playgroud)
调用此存储过程的应用程序设计可能存在错误。
我应该避免制作执行相同存储过程和方法来插入新数据并更新旧数据的应用程序吗?
有没有更好的方法来以一种方法实现更新或插入数据?
我正在使用 SQL Server 2005 / 2008。
有没有什么好方法可以避免isnull()在存储过程中多次编写函数?
我有一个使用该isnull()函数近 30 次的存储过程,我认为我缺少一个概念,但是在找到更好的方法来获取我的数据之前,我会喜欢从这么多isnull()函数中清理我的代码。
我可以暂时将 SQL Server 2008 R2 设置为使用空值作为浮点 0 吗?isnull()如果没有数据,我的大部分内容只是添加零 0 值,以便我可以进行数学运算。
编辑:我不是懒惰,我只是想清理我的代码并避免选择部分看起来像这样
select
vrsta.NAZIV
,isnull(sum(prod.prod_mpci),0) as prod_MPCI
,isnull(sum(isnull(mal_MPCI,0) + (vel_kol * isnull(mal_MPC,vel_VPC))),0) as lager_mpci
,isnull(sum(vel_NCI),0)+isnulL(sum(mal_NCI),0) as lager_nci
,sum( case
when isnull(vel_KOL,0)+isnull(mal_KOL,0) > isnull(prod.prod_kol,0) and isnull(dzn.dzn,'2010-01-01') < @dzu
then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_MPC,vel_VPC)
else 0 end
) as visak_MPC
,sum( case
when isnull(vel_KOL,0)+isnull(mal_KOL,0) > isnull(prod.prod_kol,0) and isnull(dzn.dzn,'2010-01-01') < @dzu
then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_NC,vel_NC)
else 0 end
) as visak_MPC
,sum( case …Run Code Online (Sandbox Code Playgroud) 
我试图找到一种能够像使用 Access 那样物理保存和打开 SQL Server 数据库的有效方法。我希望能够将我的整个数据库保存到一个文件中并在其他服务器上打开它。我已经尝试过备份/恢复,但它们非常棘手,而且它并不总是有效。除了备份/恢复程序之外,还有其他方法吗?
以下是我尝试进行还原时得到的结果。我尝试了我能想到的所有可能的方法,但它根本无法恢复。
是否可以在 SQL Server 2008 R2 中回滚一整套已提交的事务而无需任何通知或日志记录?
本周末,我们在 HA 集群 SQL Server 2008 R2 环境中显然回滚了一组数据。数据存在,现在不存在。SQL Server 错误日志中没有任何内容,群集日志中也没有任何内容。最初加载数据的 SQL Server 代理作业成功运行(包括从进程本身发送的进度电子邮件)。
唯一没有回滚的是批量插入的数据。数据库设置为完全恢复,因此批量插入的数据也应该回滚,对吗?
很抱歉缺乏细节,但我真的很难过。甚至想不出还有什么地方可以看。
我需要将 SQL Server 2000 数据库恢复到大约 2 天前的备份。我刚刚备份了它并试图恢复它,但它说它正在使用中。
找出谁仍在使用它,然后如何断开它们的最佳方法是什么?
我想使数据库离线是一种简单的方法,但可能不是最安全的方法?
查询是:
Select
Case AStatus
When 1 then 'Success'
When 0 then 'Faliure'
END,
Case AStatus
When 1 then 'AStatus'
When 0 then 'AStatus'
END,
Case AStatus
When 1 then 'Expected:1'
When 0 then 'Recived: 0'
END
From Statuses
Where LocalPath= 'c:\Status'
Run Code Online (Sandbox Code Playgroud)
在 SQL Server Compact 中运行不佳的原始查询(等于上述查询)是:
Select
Case AStatus
When 1 then 'Success', 'AStatus', 'Expected:1'
When 0 then 'Faliure', 'AStatus', 'Recived: 0'
end
From Statuses
Where LocalPath= 'c:\Status
Run Code Online (Sandbox Code Playgroud) 我给出了两个表格的简化版本,如下所示。
表记录
ID unit val
--- --- ---
1 KV 3
1 BAR 4
2 KV 7
2 KG 5
3 C 37
Run Code Online (Sandbox Code Playgroud)
表单位
unit convUnit formula
--- --- ---
KV CV @val * .865
KG lbs @val / 2.205
BAR PSI @val / 14.504
C F @val * 9/5 + 32
Run Code Online (Sandbox Code Playgroud)
我将无法更改表结构。
我知道哪个单位将转换为哪个单位(即我知道 KV 将转换为 CV,KG 将转换为磅等..)。
请注意,公式是一varchar列,我从表格tblRecords.unit中引用了tblUnit.unit
但我的问题是如何在单个查询中动态计算公式。即我想要以下输出。
ID unit val convVal(column will be counted on the fly using formula stored in tblUnit.formula …Run Code Online (Sandbox Code Playgroud) 我有一个 1 GB.LDF的测试数据库,我想将其缩小。如果需要,我很乐意删除其内容。
如何为 SQL Server 2000 执行此操作?
我尝试了以下方法但无济于事:
BACKUP LOG Database_TEST with truncate_only
DBCC SHRINKFILE (Database_TEST_Log, 1000)
Run Code Online (Sandbox Code Playgroud) sql-server ×7
t-sql ×4
backup ×1
insert ×1
locking ×1
null ×1
performance ×1
restore ×1
update ×1
xml ×1