问题很自我解释.我想做一个简单的查找和替换,就像你在文本编辑器中我的数据库列中的数据一样(MS Windows Server 2003上的MsSQL)
我对TSQL中的某些东西感到惊讶.我认为,如果xact_abort打开,调用类似的东西
raiserror('Something bad happened', 16, 1);
Run Code Online (Sandbox Code Playgroud)
将停止执行存储过程(或任何批处理).
但我的ADO.NET错误消息恰恰相反.我在异常消息中收到了raiserror错误消息,以及之后发生的下一个错误消息.
这是我的解决方法(无论如何这是我的习惯),但它似乎不应该是必要的:
if @somethingBadHappened
begin;
raiserror('Something bad happened', 16, 1);
return;
end;
Run Code Online (Sandbox Code Playgroud)
文档说这个:
当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则终止并回滚整个事务.
这是否意味着我必须使用显式交易?
鉴于下面的查询,dps_markers中可能有多行具有相同的标记键,但我们只想加入第一行.如果我接受此查询并删除顶部1和ORDER BY我得到一个mbg.marker_value的值但是按原样运行它总是返回null
SELECT u.id, mbg.marker_value
FROM dps_user u
LEFT JOIN
(SELECT TOP 1 m.marker_value, um.profile_id
FROM dps_usr_markers um (NOLOCK)
INNER JOIN dps_markers m (NOLOCK)
ON m.marker_id= um.marker_id AND
m.marker_key = 'moneyBackGuaranteeLength'
ORDER BY m.creation_date
) MBG ON MBG.profile_id=u.id
WHERE u.id = 'u162231993'
Run Code Online (Sandbox Code Playgroud) 我想SELECT GETDATE()在SQL Server 2008中打印,我需要毫秒的时间(这是为了调试目的 - 找到sp的执行时间)
我发现了这个差异
print GETDATE()返回2011-03-15 18:43:44.100 2011-03-15 18:43:44.100返回2011年3月15日下午6:44我认为SQL Server会自动对打印功能进行类型转换.
我需要打印这样的日期 SELECT GETDATE()
谢谢你的帮助.
在研究Table Hints的使用时,我遇到了这两个问题:
这两个问题的答案都说,在使用时(UPDLOCK, HOLDLOCK),其他进程将无法读取该表上的数据,但我没有看到这一点.为了测试,我创建了一个表并启动了两个SSMS窗口.从第一个窗口,我运行了一个使用各种表提示从表中选择的事务.当事务正在运行时,我从第二个窗口运行了各种语句,看看哪些会被阻止.
测试表:
CREATE TABLE [dbo].[Test](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Value] [nvarchar](50) NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
从SSMS窗口1:
BEGIN TRANSACTION
SELECT * FROM dbo.Test WITH (UPDLOCK, HOLDLOCK)
WAITFOR DELAY '00:00:10'
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
从SSMS窗口2(运行以下之一):
SELECT * FROM dbo.Test
INSERT dbo.Test(Value) VALUES ('bar')
UPDATE dbo.Test SET Value = …Run Code Online (Sandbox Code Playgroud) 我正在寻找如何使用RegEx替换/编码文本基于下面的RegEx设置/参数:
RegEx.IgnoreCase = True
RegEx.Global = True
RegEx.Pattern = "[^a-z\d\s.]+"
Run Code Online (Sandbox Code Playgroud)
我在RegEx上看到了一些例子,但对于如何在SQL Server中以相同的方式应用它感到困惑.任何的意见都将会有帮助.谢谢.
我使用以下内容在我的存储过程中搜索字符串:
use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'
Run Code Online (Sandbox Code Playgroud)
是否可以轻松修改上述内容,以便在特定的数据库"DBname"中搜索表名?
我有一个SSIS包,最终我也想传递参数,这些参数将来自.NET应用程序(VB或C#),所以我很好奇,如果有人知道如何做到这一点,或者更好的是一个有帮助提示的网站如何做到这一点.所以基本上我想从.NET执行一个SSIS包传递它可以在其中使用的SSIS包参数.例如,SSIS包将使用平面文件导入到SQL数据库中,但文件的路径和名称可以是从.Net应用程序传递的参数.
我以前写这样的EXISTS检查:
IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)
前一个DBA中的一个告诉我,当我做一个EXISTS条款时,请使用SELECT 1而不是SELECT *
IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)
这真的有所作为吗?
我有一个相对较大的表(目前有200万条记录),并想知道是否有可能提高即席查询的性能.ad-hoc这个词在这里是关键.添加索引不是一个选项(最常见的列上已有索引).
运行简单查询以返回最近更新的100条记录:
select top 100 * from ER101_ACCT_ORDER_DTL order by er101_upd_date_iso desc
Run Code Online (Sandbox Code Playgroud)
需要几分钟.见下面的执行计划:

表扫描的其他详细信息:

SQL Server Execution Times:
CPU time = 3945 ms, elapsed time = 148524 ms.
Run Code Online (Sandbox Code Playgroud)
服务器非常强大(从内存48GB内存,24核心处理器)运行sql server 2008 r2 x64.
更新
我发现这个代码创建了一个包含1,000,000条记录的表.我想我可以SELECT TOP 100 * FROM testEnvironment ORDER BY mailAddress DESC在几台不同的服务器上运行,看看我的磁盘访问速度是否在服务器上很差.
WITH t1(N) AS (SELECT 1 UNION ALL SELECT 1),
t2(N) AS (SELECT 1 FROM t1 x, t1 y),
t3(N) AS (SELECT 1 FROM t2 x, t2 y),
Tally(N) AS (SELECT TOP 98 …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql ×6
t-sql ×4
.net ×1
c# ×1
concurrency ×1
datetime ×1
getdate ×1
locking ×1
outer-join ×1
regex ×1
ssis ×1
vb.net ×1