AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-6173

Rachel's questions

Martin Hope
Rachel
Asked: 2014-01-02 16:40:15 +0800 CST

决定何时扩展到子表

  • 5

我有一个实体表。例如,我们称它们为Vehicles: Car, Boat, Motercycle, 等。

理想情况下,我希望将所有实体放在一个Vehicles表中,因为许多相关表(VehicleRatings、VehicleComments、VehicleHistory等)将应用于任何实体,而不仅仅是其中一个。

但是一些实体有一些不与其他实体类型共享的单独属性。现在,一个实体只有 1 个额外属性,另一个实体有 2 个。我预计以后可能会发现更多,但总体而言并不多。

我怎么知道什么时候最好为每个实体类型创建一个子表来存储这些单独的属性,而不是仅仅在父Vehicles表中添加一个额外的列?我可以问自己任何问题来帮助确定这个答案吗?

我希望主要优化查询性能,其次是易于维护。

database-design
  • 2 个回答
  • 1610 Views
Martin Hope
Rachel
Asked: 2013-05-10 08:24:42 +0800 CST

如果我对一个数据库进行故障转移,共享同一镜像端点的其他数据库是否也会进行故障转移?

  • 11

我们有两个数据库设置用于在单个 SQL Server 实例上进行镜像:一个测试数据库和一个生产数据库。两者都使用完全相同的端点镜像到另一台服务器。

如果我进入测试数据库的数据库属性并单击“故障转移”按钮,它是否也会对生产数据库进行故障转移,因为两个数据库共享一个镜像端点并且它们的服务器网络地址属性相同?

在此处输入图像描述

我很担心,因为当我为第二个数据库设置镜像时,我不需要配置任何新东西。它只是使用了所有现有信息。

如果我使用“数据库属性”中的“故障转移”按钮,是否会导致使用该端点的所有数据库故障转移,或者只是我正在查看其属性的特定数据库?

sql-server sql-server-2005
  • 2 个回答
  • 2213 Views
Martin Hope
Rachel
Asked: 2013-05-09 06:47:39 +0800 CST

如何在存储过程的全文中搜索值?

  • 5

当我想查找特定值时,我使用以下脚本来搜索所有存储过程的文本。

SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE @searchText
ORDER BY ROUTINE_NAME   

我最近发现它ROUTINE_DEFINITION在 4000 个字符后停止,所以一些程序在应该返回的时候没有返回。

如何查询存储过程的全文以获取值?

sql-server sql-server-2005
  • 4 个回答
  • 13913 Views
Martin Hope
Rachel
Asked: 2013-04-24 07:35:48 +0800 CST

我可以将#temp 表的表结构复制到新的物理表吗?

  • 6

我有一个#tempTable使用

SELECT *
INTO #tempTable
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0;Database=MyFileName.xls', 
'SELECT * FROM [Sheet1$]')

有没有一种简单的方法可以将表结构复制#tempTable到新的物理表中?

临时表包含许多包含数字、日期、小数和字符串的列,我不想识别和手动定义每一列。

我正在使用 SQL Server 2005

sql-server sql-server-2005
  • 2 个回答
  • 18529 Views
Martin Hope
Rachel
Asked: 2013-02-27 08:22:30 +0800 CST

将列别名放在列定义的开头或结尾有什么区别吗?

  • 12

我总是看到并将我的列别名写成

SELECT 1 as ColumnName

但是今天遇到了一个使用过的查询

SELECT ColumnName = 1

这两个查询的执行方式有什么不同吗?或者 DBA 之间是否有关于使用哪一个的标准?

就我个人而言,我认为对于更长的列定义,第二个更容易阅读/维护(本文中的好例子),但是我从未见过今天之前使用过的第二个语法,所以我想知道是否有某些原因我不应该这样做使用它。

sql-server t-sql
  • 2 个回答
  • 2448 Views
Martin Hope
Rachel
Asked: 2013-02-19 05:50:00 +0800 CST

我可以启动一个存储过程并立即返回而不等待它完成吗?

  • 47

我们有一个存储过程,用户可以手动运行该存储过程,以获取全天不断使用的报告的一些更新数字。

我有第二个存储过程应该在第一个存储过程运行之后运行,因为它基于从第一个存储过程获得的数字,但是它需要更长的时间运行并且是一个单独的进程,所以我不想在第二个存储过程运行时让用户等待。

有没有办法让一个存储过程启动第二个存储过程,并立即返回而不等待结果?

我正在使用 SQL Server 2005。

sql-server sql-server-2005
  • 5 个回答
  • 66271 Views
Martin Hope
Rachel
Asked: 2013-01-26 08:46:17 +0800 CST

如何修复“无法执行差异备份...当前数据库备份不存在”?

  • 11

我们最近切换到FULL恢复模式,每个周末都进行完整备份,每天进行差异备份。

问题是,差异备份似乎并不总是有效。作业历史中记录的错误信息是

作为用户执行:用户名。... 9.00.3042.00(32 位)版权所有 (C) Microsoft Corp 1984-2005。版权所有。
开始时间:上午 11:20:12 进度:2013-01-25 11:20:13.90 来源:{450389BA-54C2-4892-9CD0-0126CA9B0ED8} 执行查询“DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp”。:100%完成结束进度错误:2013-01-25 11:20:14.40 代码:0xC002F210
来源:备份数据库(差异)执行 SQL 任务
描述:执行查询“BACKUP DATABASE [MyDatabase] TO DISK = N'E:\Database Backups \MyDatabase_backup_201301251120.diff' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'MyDatabase_backup_20130125112014', SKIP, REWIND, NOUNLOAD, STATS = 10" 失败并出现以下错误:“无法为数据库“MyDatabase”执行差异备份,因为当前数据库备份不存在。通过重新发出 BACKUP DATABASE 来执行完整数据库备份,省略 WITH DIFFERENTIAL 选项。BA ... 包执行 fa... 步骤失败的。

完整备份作业每次都成功完成,我可以使用此处msdb.dbo.backupset找到的查询查看它,所以我知道它存在。看起来在重新启动后,差异备份确实成功完成,直到下一次完整备份。

以下是我的工作经历:

1/16 - 完全备份 - 成功
1/17 - 差异备份 - 成功
1/18 - 差异备份 - 成功
1/19 - 差异备份 - 成功
1/20 - 完全备份 - 成功
1/21 - 差异备份 - 失败
1/21 - 差异备份 - 失败
1/22 - 完全备份 - 成功
1/22 - 差异备份 - 失败
1/22 - 重启
1/23 - 差异备份 - 成功
1/23 - 重新启动
1/24 - 差异备份 - 成功
1/25 - 完全备份 - 成功
1/25 - 差异备份 - 失败

重新启动是由于一个不相关的错误 where @@SERVERNAMEis null,所以我推迟发布这个问题,直到我发现是否修复@@SERVERNAME了问题,但它没有,现在我不知道从哪里开始。

什么会导致 SQL Server 无法识别数据库的完整备份,我该如何解决?

另外我不确定这是否相关,但差异备份似乎相当大,我想知道他们是否正在运行一开始(1/16)而不是最开始的完整数据库备份的差异最近的完整备份。完整备份约为 260GB,1/23-1/24 的差异分别为 30GB。

这些作业是使用 SQL Server 维护计划向导设置的,我使用的是 SQL Server 2005

维护计划的 [查看 T-SQL] 按钮返回以下代码:

完全备份:

BACKUP DATABASE [MyDatabase] 
TO DISK = N'E:\Database Backups\MyDatabase_backup_2013_01_25_140607_2543780.bak' 
WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10, 
    NAME = N'MyDatabase_backup_2013_01_25_140607_2523778'

微分:

BACKUP DATABASE [MyDatabase] 
TO DISK = N'E:\Database Backups\MyDatabase_backup_2013_01_25_140537_4073936.diff' 
WITH DIFFERENTIAL, NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD,  STATS = 10, 
    NAME = N'MyDatabase_backup_2013_01_25_140537_4053934'

这与我的另一个问题 密切相关,但是在聊天中建议我发布一个新问题而不是编辑另一个问题,因为问题不同并且另一个问题的现有答案。

sql-server sql-server-2005
  • 1 个回答
  • 13018 Views
Martin Hope
Rachel
Asked: 2013-01-22 06:43:59 +0800 CST

我可以手动重置“完整数据库备份的内部状态标志”吗?

  • 4

我们最近切换到FULL恢复模式,每个周末都进行完整备份,每天进行差异备份。

这在上周末奏效了,但是这个周末差异备份失败了,说

信息

以用户身份执行:用户名。... 32 位版本的 9.00.3042.00 版权所有 (C) Microsoft Corp 1984-2005。版权所有。
开始时间:12:30:00 AM
进度:2013-01-21 00:30:01.69
来源:{450389BA-54C2-4892-9CD0-0126CA9B0ED8} 执行查询“DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp”:100%完成
结束进度
错误:2013-01-21 00:30:02.11 代码:0xC002F210
来源:备份数据库(差异)执行 SQL 任务
描述:执行查询“BACKUP DATABASE [MyDatabase] TO DISK = N'E:\Database Backups \MyDatabase_backup_201301210030.bak' WITH DIFFERENTIAL, NOFORMAT, NOINIT, NAME = N'MyDatabase_backup_20130121003002', SKIP, REWIND, NOUNLOAD, STATS = 10 "“无法对数据库“MyDatabase”执行差异备份,因为当前数据库备份不存在。通过重新发出 BACKUP DATABASE 执行完整数据库备份,省略 WITH DIFFERENTIAL 选项 。BAC...包执行失败...步骤失败的。

运行完整数据库备份的作业成功运行,我可以使用此处找到的查询查看备份,所以我不确定为什么它告诉我“当前数据库备份不存在”。

我发现这个 MSDN 页面表明问题的原因是

如果在创建完整数据库备份后完整数据库备份的内部状态标志未重置,则可能会出现此问题。

我无法立即安装修补程序,并且现在不能进行另一个完整的数据库备份,所以我想尝试手动重置内部状态标志以进行完整的数据库备份。

有没有办法手动重置此标志,以便在本周余下的时间里成功运行差异?msdb.dbo.BackupSet或者将基本备份设置为/中存在的现有完整备份msdb.dbo.BackupMediaFamily?

我正在使用 SQL Server 2005

sql-server-2005 backup
  • 2 个回答
  • 1313 Views
Martin Hope
Rachel
Asked: 2013-01-15 11:25:10 +0800 CST

可以将 WITH INIT 用于我的事务日志备份以避免它变得太大吗?

  • 4

我仍在努力理解 SQL 的备份作业。

我们目前有一个使用完整恢复模型的 SQL Server 2005 实例。

我们每周都会进行一次完整的数据库备份。

BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase.Bak'
WITH INIT, NAME = N'MyDatabase.Bak'

并且每天进行一次差异备份

BACKUP DATABASE [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Diff.Bak'
WITH INIT, DIFFERENTIAL, NAME = N'MyDatabase_Diff.Bak'

现在我想弄清楚如何安排每小时的事务日志备份,所以我们最多会损失一个小时的工作。

BACKUP LOG [MyDatabase]
TO DISK = N'E:\Database Backups\MyDatabase_Log.Bak'

我的问题是,我们的存储空间有限,我不希望日志文件变得太大。我可以WITH INIT在事务日志备份上使用强制它每小时创建一个新文件吗?或者我是否需要自上次差异备份以来的所有事务日志备份才能恢复到一天中的特定时间点?

如果我确实需要保留自上次差异以来的所有副本,有没有办法告诉它在我进行备份时重置?

sql-server-2005 backup
  • 2 个回答
  • 8455 Views
Martin Hope
Rachel
Asked: 2012-12-19 10:58:47 +0800 CST

如何在不影响性能的情况下备份大型 SQL Server 数据库?

  • 20

我们收到了关于查询运行缓慢或一大早超时的报告,而我认为唯一可能影响此运行的工作是我们的数据库备份工作。

数据库本身大约 300GB,备份作业从凌晨 4:30 开始,直到早上 7:00 之后才完成。我们备份作业的当前语法是:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\是服务器上的一个分区,它同时保存数据库和数据库备份。

还应该注意,这是一个虚拟服务器,而不是专用的独立服务器。在我们切换到虚拟服务器后,我们开始收到有关备份过程中速度变慢的投诉,所以我认为这可能是相关的。

有没有办法运行这个备份作业,所以它在运行时不会影响查询性能?

我们正在使用 SQL Server 2005

sql-server sql-server-2005
  • 4 个回答
  • 42334 Views
Martin Hope
Rachel
Asked: 2012-12-07 05:43:50 +0800 CST

当 SQL 不会执行时,如何阻止 SQL 验证 OPENROWSET 查询?

  • 2

我有一个存储过程引发错误的问题,因为它试图在其中运行/验证OPENROWSET它实际上不必执行的查询。

看起来像这样的存储过程:

IF (@flagA = 1)
BEGIN
    INSERT INTO #tmpData(Column1, Column2, Column3)
    SELECT A, B, C
    FROM (
        SELECT *
        FROM OPENROWSET(
            'Microsoft.ACE.OLEDB.12.0', 
            'Text; HDR=Yes; Database=\\server\tmpFiles', 
            'SELECT * FROM FileA.txt')
    ) as T
END

IF (@flagB = 1)
BEGIN
    INSERT INTO #tmpData(Column1, Column2, Column3)
    SELECT D, E, F
    FROM (
        SELECT *
        FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
        'Excel 8.0;Database=\\server\tmpFiles\FileB.xls', 
        'SELECT * FROM [Sheet$]')
    ) as T
END

IF (@flagC = 1)
BEGIN
    INSERT INTO #tmpData(Column1, Column2, Column3)
    SELECT G, H, I
    FROM (
        SELECT *
        FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
        'Excel 8.0;Database=\\server\tmpFiles\FileC.xls', 
        'SELECT * FROM [Sheet1$]')
    ) as T
END

请注意,每个OPENROWSET文件都以不同的格式引用具有不同列名的不同文件。

我的问题是,如果其中一个文件不存在,或者以错误的格式存在(例如有人错误地将 FileB 上传为 FileC),即使该OPENROWSET查询永远不会在该过程尝试运行时出现错误意味着被执行。

例如,如果 FileB 不存在并且您尝试使用 运行该过程@flagB = 0,它将抛出一个错误,说它找不到链接服务器FileB

或者,如果用户错误地将 a 上传FileB为 a FileC,然后通过从表单中删除来纠正自己FileC,它会在下次运行过程时抛出错误Cannot process the object "SELECT * FROM [Sheet1$]",因为 FileC 不会有一个名为 的工作表Sheet1,即使@flagC = 0

OPENROWSET如果查询不是被执行的,我如何防止 SQL 验证查询?

sql-server sql-server-2005
  • 1 个回答
  • 1494 Views
Martin Hope
Rachel
Asked: 2012-11-27 09:13:39 +0800 CST

我可以从 SSMS 查询制表符分隔的文件吗?

  • 16

是否可以从 Sql Server Management Studio 查询制表符分隔的文件以查看其数据而不将其保存在任何地方?

我知道您可以BULK INSERT使用以下内容从制表符分隔的文件中:

BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');

但是,这需要您提前知道列并创建一个表来保存数据。

我还知道您可以查询其他一些文件类型,例如 CSV 或 Excel,而无需预先使用OPENROWSETExcel 驱动程序定义列,例如:

-- Query CSV
SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Text;Database=\\Server\Folder\;HDR=Yes;', 
    'SELECT * FROM MyFile.csv')

-- Query Excel
SELECT *
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 
    'Excel 8.0;Database=MyFile.xls', 
    'SELECT * FROM [Sheet1$]')

此外,如果我在 SQL Server 上将注册表项从 from 更改为Formatto HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text,CSVDelimited则TabDelimited上面的 CSV 查询将正确读取制表符分隔的文本文件,但是它将不再读取逗号分隔的文本文件,所以我不认为我想要就这样离开它。

尝试在中使用Format=TabDelimited也OPENROWSET不起作用

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited', 
    'SELECT * FROM MyFile.txt')

我已经尝试将Text注册表项从Engines和ISAM Formats键复制到默认为 的自定义项TabDelimited,但是它仍在读取文件CSVFormat而不是TabDelimited格式,所以我必须在这里遗漏一些东西。

有没有办法查询制表符分隔的文件以查看其内容而无需创建表和BULK INSERT它?

我正在使用 SQL Server 2005

sql-server-2005 csv
  • 2 个回答
  • 13795 Views
Martin Hope
Rachel
Asked: 2012-11-06 05:25:33 +0800 CST

对于 DST 之前或之后的日期,如何获得 UTC 和本地时间之间的正确偏移量?

  • 34

我目前使用以下方法从 UTC 日期时间获取本地日期时间:

SET @offset = DateDiff(minute, GetUTCDate(), GetDate())
SET @localDateTime = DateAdd(minute, @offset, @utcDateTime)

我的问题是,如果夏令时发生在GetUTCDate()和之间@utcDateTime,@localDateTime最终会休息一个小时。

是否有一种简单的方法可以将非当前日期的日期从 UTC 转换为当地时间?

我正在使用 SQL Server 2005

sql-server sql-server-2005
  • 11 个回答
  • 213140 Views
Martin Hope
Rachel
Asked: 2012-10-20 11:37:55 +0800 CST

是否有更简洁的方法将 UTC 日期时间仅转换为本地日期?

  • 7

我正在尝试编写一个查询,该查询仅根据 UTC 日期时间字段的本地日期部分对记录进行分组。

例如,如果我的表包含10/19/2012 2:00:00,那么它应该被分组为10/18/2012,因为我的当地时间是 EST (-5h) 并且我只对字段的日期部分感兴趣。

我知道我DateAdd(day, DateDiff(day, 0, MyDate), 0)只能从日期时间字段中获取日期部分,并且可以DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)将 UTC 日期时间转换为本地日期时间。

但是将两者结合起来严重冒犯了我。

在 SQL Server 2005 中,有没有比这更好的方法来获取 UTC DateTime 字段的 Date 部分,转换为本地时间?

  SELECT DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
       , Count(*)
    FROM MyTable
GROUP BY DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
sql-server sql-server-2005
  • 3 个回答
  • 21764 Views
Martin Hope
Rachel
Asked: 2012-10-20 09:23:02 +0800 CST

有没有办法通过重复 TableB 将 TableA 的每一行连接到较小的 TableB 的一行,但是需要多次?

  • 8

抱歉,标题令人困惑,我不确定在那里写什么。

我有一张包含数百条记录的表格。我需要将此表的每条记录分配给一个小得多的动态用户表,用户应该轮流分配给他们的记录。

例如,如果表 A 是

Row_Number() ID
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10

表B是

Row_Number() ID
1 1
2 2
3 3

我需要一个最终结果集

UserId RecordId
1 1
2 2
3 3
1 4
2 5
3 6
1 7
2 8
3 9
1 10

我设法使用 mod 运算符做了一些有点混乱的事情,但我很好奇是否可以在没有临时表和变量的情况下运行相同的查询。

使用临时表是因为 TableA 实际上是一个用户定义函数,它将逗号分隔的字符串转换为表,我需要 UDF 中的对象计数。

-- Converts a comma-delimited string into a table
SELECT Num as [UserId], Row_Number() OVER (ORDER BY (SELECT 1)) as [RowNo]
INTO #tmpTest
FROM dbo.StringToNumSet('2,3,1', ',') 

DECLARE @test int
SELECT @test = Count(*) FROM #tmpTest

SELECT *
FROM #tmpTest as T1
INNER JOIN (
    SELECT Top 10 Id, Row_Number() OVER (ORDER BY SomeDateTime) as [RowNo]
    FROM TableA WITH (NOLOCK)
) as T2 ON T1.RowNo = (T2.RowNo % @test) + 1

UserIds 也交替使用很重要。我无法将记录的前 1/3 分配给 User1,将记录的第二个 1/3 分配给 User2,将记录的第三个 1/3 分配给 User3。

此外,UserIds 需要保持它们最初输入的顺序,这就是为什么我Row_Number() OVER (ORDER BY (SELECT 1))在用户表中有一个

有没有一种方法可以在单个查询中连接这些表,这样我就不需要使用临时表和变量了?

我正在使用 SQL Server 2005

sql-server-2005 query-refactor
  • 2 个回答
  • 488 Views
Martin Hope
Rachel
Asked: 2012-09-14 05:56:13 +0800 CST

为什么在数学方程式中使用 Real 数据类型会返回不正确的结果?

  • 4

我试图找出今天似乎是舍入错误的来源,并发现数学方程式中使用的其中一列使用的是真实数据类型,这导致我的方程式返回不正确的值。

有人可以向我解释为什么

SELECT 776.2384 * cast(100 as real) / 100 

等于776.2385_

SELECT 776.2384 * 100 / 100

等于776.2384?

sql-server sql-server-2005
  • 1 个回答
  • 1308 Views
Martin Hope
Rachel
Asked: 2012-07-27 04:44:36 +0800 CST

在 SQL Server 2005 上获得最少多列的最有效方法是什么?

  • 29

我处于想要从 6 列中获取最小值的情况。

到目前为止,我已经找到了三种方法来实现这一点,但我担心这些方法的性能,并想知道哪种方法对性能更好。

第一种方法是使用大case 语句。这是一个包含 3 列的示例,基于上面链接中的示例。我的案例陈述会更长,因为我将查看 6 列。

Select Id,
       Case When Col1 <= Col2 And Col1 <= Col3 Then Col1
            When Col2 <= Col3 Then Col2 
            Else Col3
            End As TheMin
From   MyTable

第二种选择是将UNION运算符与多个选择语句一起使用。我会把它放在一个接受 Id 参数的 UDF 中。

select Id, dbo.GetMinimumFromMyTable(Id)
from MyTable

和

select min(col)
from
(
    select col1 [col] from MyTable where Id = @id
    union all
    select col2 from MyTable where Id = @id
    union all
    select col3 from MyTable where Id = @id
) as t

我发现的第三个选项是使用 UNPIVOT 运算符,直到现在我才知道它存在

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, Col1, Col2, Col3
    from TestTable
)
select cte.ID, Col1, Col2, Col3, TheMin from cte
join
(
    select
        ID, min(Amount) as TheMin
    from 
        cte 
        UNPIVOT (Amount for AmountCol in (Col1, Col2, Col3)) as unpvt
    group by ID
) as minValues
on cte.ID = minValues.ID

由于表的大小以及查询和更新该表的频率,我担心这些查询会对数据库产生性能影响。

此查询实际上将用于连接具有几百万条记录的表,但是返回的记录一次将减少到大约一百条记录。它将在一天中运行多次,并且我查询的 6 列经常更新(它们包含每日统计信息)。我认为我查询的 6 列上没有任何索引。

在尝试获得最少的多列时,这些方法中的哪一种对性能更好?还是有另一种我不知道的更好的方法?

我正在使用 SQL Server 2005

样本数据和结果

如果我的数据包含这样的记录:

标识 Col1 Col2 Col3 Col4 Col5 Col6
1 3 4 0 2 1 5
2 2 6 10 5 7 9
3 1 1 2 3 4 5
4 9 5 4 6 8 9

最终结果应该是

标识值
1 0
2 2
3 1
4 4
sql-server sql-server-2005
  • 7 个回答
  • 56497 Views
Martin Hope
Rachel
Asked: 2012-07-20 07:03:37 +0800 CST

如何从字符串中去除非数字字符?

  • 14

用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。

一个字段(电话号码)由所有数字组成,因此在检查时会使用 .Net CLR 函数从字符串中删除所有非数字字符。

SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')

问题是,此功能有时会突然停止工作,并出现以下错误:

消息 6533,第 16 级,状态 49,第 2 行
AppDomain MyDBName.dbo[runtime].1575 已通过升级策略卸载,以确保
应用程序的一致性。访问关键资源时发生内存不足。
System.Threading.ThreadAbortException:类型异常
'System.Threading.ThreadAbortException' 被抛出。
System.Threading.ThreadAbortException:

我已经尝试了MSDN上针对此错误发布的建议,但仍然遇到问题。目前,切换到 64 位服务器不是我们的选择。

我知道重新启动服务器会释放它所拥有的任何内存,但这在生产环境中不是一个可行的解决方案。

有没有办法仅使用 T-SQL 从 SQL Server 2005 中的字符串中去除非数字字符?

sql-server sql-server-2005
  • 3 个回答
  • 93406 Views
Martin Hope
Rachel
Asked: 2012-06-19 10:26:29 +0800 CST

有没有办法设置用户运行 SP,但不访问基础数据表?

  • 6

我们在两个链接的独立服务器盒上有两个数据库实例。网站用户需要能够在 DatabaseA 上运行查询 DatabaseB 表的存储过程,但是它不应该能够直接从 DatabaseB 上的表中读取。

在 Sql Server 2005 中可能发生这样的事情吗?

简单地创建一个存储过程并授予 Web 用户执行它的权限会返回错误Access to the remote server is denied because no login-mapping exists.

我真的不想让网站用户帐户免费访问 DatabaseB 表。

更新

Aaron 关于使用的建议EXECUTE AS OWNER无效,因为Owner无权访问 DatabaseB。

使用EXECUTE AS 'UserWithPermissions'返回错误Access to the remote server is denied because the current security context is not trusted。在线查看使我相信这是因为数据库未标记为TRUSTWORTHY,因此远程数据库拒绝连接。我怀疑如果两个数据库实例在同一台服务器上它会工作正常。

我不想设置网络数据库,TRUSTWORTHY因为它的一些安全性更宽松,所以我选择了 Aaron 的另一个选项:创建一个用户DatabaseB,只能访问包含网站应该访问的数据的几个特定视图,然后进入链接服务器对象的安全属性,并设置网站用户在访问链接服务器时以新的受限用户身份登录。

这允许我的网站用户对私有数据库中的特定数据具有有限的访问权限,而无需授予其对任何基础表的访问权限。

sql-server-2005 stored-procedures
  • 2 个回答
  • 1360 Views
Martin Hope
Rachel
Asked: 2012-05-17 05:00:58 +0800 CST

Month(date) 和 DatePart(month, date) 之间有什么显着差异吗?

  • 6

MSDN 声明两者都Month(date)返回DatePart(month, date)完全相同的值,但是这两种方法、性能或其他方面有什么区别吗?

我正在构建一些基于月份聚合大量数据的查询,有时它们需要一段时间才能运行,所以我想确保我使用的是最有效的语法。

我目前正在使用 SQL Server 2005

sql-server sql-server-2005
  • 2 个回答
  • 4060 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve