标签: sql-server

如何在MsSQL中进行简单的"查找和替换"?

问题很自我解释.我想做一个简单的查找和替换,就像你在文本编辑器中我的数据库列中的数据一样(MS Windows Server 2003上的MsSQL)

sql sql-server

85
推荐指数
3
解决办法
16万
查看次数

当xact_abort打开时,为什么Sql Server在raiserror之后继续执行?

我对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语句引发运行时错误,则终止并回滚整个事务.

这是否意味着我必须使用显式交易?

sql t-sql sql-server

85
推荐指数
4
解决办法
5万
查看次数

前1名左连接

鉴于下面的查询,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)

sql-server outer-join

85
推荐指数
2
解决办法
10万
查看次数

如何在毫秒的时间内在SQL Server中打印GETDATE()?

我想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()

谢谢你的帮助.

sql sql-server datetime getdate sql-server-2008

85
推荐指数
4
解决办法
17万
查看次数

对UPDLOCK,HOLDLOCK感到困惑

在研究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)

t-sql sql-server concurrency locking sql-server-2008

85
推荐指数
2
解决办法
10万
查看次数

在SQL Server中使用RegEx

我正在寻找如何使用RegEx替换/编码文本基于下面的RegEx设置/参数:

RegEx.IgnoreCase = True     
RegEx.Global = True     
RegEx.Pattern = "[^a-z\d\s.]+"   
Run Code Online (Sandbox Code Playgroud)

我在RegEx上看到了一些例子,但对于如何在SQL Server中以相同的方式应用它感到困惑.任何的意见都将会有帮助.谢谢.

regex t-sql sql-server sql-server-2008

85
推荐指数
5
解决办法
38万
查看次数

搜索表名

我使用以下内容在我的存储过程中搜索字符串:

use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'
Run Code Online (Sandbox Code Playgroud)

是否可以轻松修改上述内容,以便在特定的数据库"DBname"中搜索表名?

sql sql-server sql-server-2008-r2

85
推荐指数
6
解决办法
25万
查看次数

如何从.NET执行SSIS包?

我有一个SSIS包,最终我也想传递参数,这些参数将来自.NET应用程序(VB或C#),所以我很好奇,如果有人知道如何做到这一点,或者更好的是一个有帮助提示的网站如何做到这一点.所以基本上我想从.NET执行一个SSIS包传递它可以在其中使用的SSIS包参数.例如,SSIS包将使用平面文件导入到SQL数据库中,但文件的路径和名称可以是从.Net应用程序传递的参数.

.net c# vb.net sql-server ssis

84
推荐指数
3
解决办法
11万
查看次数

使用存在1或存在的子查询*

我以前写这样的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)

这真的有所作为吗?

sql t-sql sql-server

84
推荐指数
4
解决办法
2万
查看次数

提高大型表上的SQL Server查询性能

我有一个相对较大的表(目前有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 sql-server sql-server-2008

84
推荐指数
4
解决办法
22万
查看次数