标签: sql-server

是否有人使用 SQL Server 功能创建按数字区分的存储过程组?

该问题是指此msdn 文档中的 number 参数

如果不这样做,您可以在 SQL-Server 中创建多个按编号区分的存储过程,然后一键删除它们。

create procedure dbo.stored_proc1 as select 1
go
create procedure dbo.stored_proc1;2 as select 2
go
exec stored_proc1
-- returns 1
go
exec stored_proc1;2
-- returns 2
go
drop stored_proc1
-- drops both 
go
Run Code Online (Sandbox Code Playgroud)

我想知道这个功能是否被任何人用于有用的东西,或者它只是一个历史性的好奇心。

sql-server stored-procedures

11
推荐指数
2
解决办法
222
查看次数

SQL 2008 Web 版“太大”有多大?

对于我们即将托管的应用程序,我需要在 SQL Server 2008 Web 版和 SQL Server 2008 企业版之间进行选择。没有任何“必备”功能:应用程序当前在 SQL Express 上运行,但它会超过 SQL Express 强加的 10GB 最大大小。

我正在查看此比较图表,以及本页“可扩展性和性能”中最重要的表格。随着表变大,诸如“表和索引分区”之类的功能对于保证性能速度至关重要。但是,这需要多大的桌子尺寸?

我应该使用什么策略来确定我的数据库的大小和使用情况是否需要企业版可扩展性和性能功能?

sql-server-2008 sql-server

11
推荐指数
2
解决办法
3062
查看次数

在 SQL Server 中找出多少记录没有正确电话号码的最佳方法是什么?

我有一个领域,人们历史上可以用来自由提供价值。我需要识别没有适当值的记录,以便我可以清理它们。

为此,我一直在 SSIS 中四处寻找。我的倾向是在某些 C# 代码中使用带有正则表达式的脚本组件,然后进行重定向。不过,我想知道 SSIS 中是否有一种方法可以在不求助于 C# 的情况下做到这一点。

我没有太多运气找到一种方法来找出有多少记录没有合适的电话号码。

sql-server-2008 sql-server query

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

如何为 SELECT 语句中的每一行分配不同的随机值?

请看这段代码:

create table #t1(
  id int identity (1,1),
  val varchar(10)
);


insert into #t1 values ('a');
insert into #t1 values ('b');
insert into #t1 values ('c');
insert into #t1 values ('d');
Run Code Online (Sandbox Code Playgroud)

现在,每当你执行这个

select *, 
    ( select top 1 val from #t1 order by NEWID()) rnd 
from #t1 order by 1;
Run Code Online (Sandbox Code Playgroud)

您将得到一个结果,其中所有行都具有相同的随机值。例如

id          val        rnd
----------- ---------- ----------
1           a          b
2           b          b
3           c          b
4           d          b
Run Code Online (Sandbox Code Playgroud)

我知道一种使用游标循环抛出行并获得不同随机值的方法,但这不是高效的。

一个聪明的解决方案是

select t1.id, t1.val, t2.val
from #t1 t1
    join (select …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server

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

显式生成唯一 ID 的标识列或 UDF?

我正在争论是否最好PRIMARY KEY使用Identity Columns,我们使用显式生成唯一 id 的 UDF 。

  • 我在为身份栏争论。
  • 我的合作伙伴主张手动生成值,他声称
    • 通过将 UDF 放在另一个可以拥有 UDF 的桌子上
      • 锁定资源
      • 递增的ID表叫做一个字段ID_Value由1
      • 将此用作全局唯一标识符
    • 或者id+1在插入时让表做一个
    • 在没有识别约束的服务器和/或环境之间移动数据更简单;从一个有数据的数据库移动到另一个类似的数据库,比如暂存或虚拟数据。对于非生产中的测试,我们可能希望将昨天的所有记录提取到暂存以进行测试。

哪个实现更有意义?

sql-server-2005 sql-server uniqueidentifier identity functions

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

还原差异备份会创建 DEFUNCT 日志文件吗?

这是我的问题。我正在尝试通过完整还原将数据库移动到新服务器,然后通过快速差异备份/还原进行切换。我可以毫无问题地进行完整还原,但是在还原差异备份时,我收到以下警告:

消息 3127,级别 16,状态 1,第 1 行 恢复的数据库 'DatabaseName' 的文件 'Database_Log2' 处于失效状态,因为该数据库正在使用简单恢复模型并且该文件被标记为可读写访问。因此,只能通过分段还原来恢复只读文件。

数据库恢复并被视为联机,但由于此 DEFUNCT 文件导致任何备份操作失败,并出现以下错误:

消息 3636,级别 16,状态 2,第 1 行处理数据库 ID 10 文件 ID 6 的“BackupMetadata”元数据时出错。消息 3046,级别 16,状态 2,第 1 行遇到不一致的元数据。唯一可能的备份操作是使用 WITH CONTINUE_AFTER_ERROR 或 NO_TRUNCATE 选项的尾日志备份。消息 3013,级别 16,状态 1,第 1 行 BACKUP DATABASE 异常终止。

如果我在完整和差异上执行 RESTORE FILELISTONLY 都会给我相同的输出,这与我从源数据库上的 sys.database_files 看到的相匹配。服务器为 SQL2012 SP1,开发版。

我可以做一个完整的备份,然后立即做一个差异,并将这些文件还原到同一服务器上的不同数据库,并看到完全相同的问题,因此差异是如何创建的。如果我使用 RECOVERY 还原完整备份,则没有问题。我不知道这个文件是否曾经存在于这个数据库中,但完全有可能这个文件曾经存在并且很久以前被删除了。如果我在恢复的数据库上查询 sys.database_files,DEFUNCT 文件具有 drop_lsn 的值,这似乎证实了这一点。目前在源数据库中只有一个文件组 (PRIMARY)、4 个数据文件和一个日志文件。

有任何想法吗?

sql-server backup restore sql-server-2012

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

使用触发器进行同步

我有一个类似于之前讨论的要求:

我有两张桌子,[Account].[Balance]并且[Transaction].[Amount]:

CREATE TABLE Account (
      AccountID    INT
    , Balance      MONEY
);

CREATE TABLE Transaction (
      TransactionID INT
     , AccountID    INT
    , Amount      MONEY
);
Run Code Online (Sandbox Code Playgroud)

当对[Transaction]表进行插入、更新或删除操作时,[Account].[Balance]应根据[Amount].

目前我有一个触发器来完成这项工作:

ALTER TRIGGER [dbo].[TransactionChanged] 
ON  [dbo].[Transaction]
AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
IF  EXISTS (select 1 from [Deleted]) OR EXISTS (select 1 from [Inserted])
    UPDATE [dbo].[Account]
    SET
    [Account].[Balance] = [Account].[Balance] + 
        (
            Select ISNULL(Sum([Inserted].[Amount]),0)
            From [Inserted] 
            Where [Account].[AccountID] = [Inserted].[AccountID]
        )
        - …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server transaction acid data-synchronization

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

循环遍历值一次剥离 1 个字符

我想遍历值并一次从值中去除 1 个字符并显示结果。

因此,如果我有一个带有值的表:

ID
___
34679
13390
89906
Run Code Online (Sandbox Code Playgroud)

我希望结果看起来像这样

Id
----
4679
679
79
9
3390
390
90
0
9906
906
06
6
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

在时态数据库设计中确保唯一条目的正确方法是什么?

我在设计时态数据库时遇到问题。我需要知道如何确保在商店的任何给定时间范围内我只有一个活动记录。我已经阅读了这个答案,但恐怕我无法理解触发器的工作原理。特别是,我如何将触发器工作到我现有的触发器中,以防止更新记录,而是插入新记录。我真正的问题是,当完成日期为空时,我不知道如何防止 Store 有多个生效日期。(即防止商店的 2 个活动记录)。

这就是我所拥有的,但它允许我为具有不同生效日期的商店插入新记录。

表定义:

/****** Object:  Table [PCR].[Z_STORE_TEAM]    Script Date: 05/09/2014 13:05:57 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U'))
DROP TABLE [Z_STORE_TEAM]
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U'))
BEGIN
CREATE TABLE [Z_STORE_TEAM](
    [STORENUM] [int] NOT NULL,
    [TEAM] [varchar](10) NULL,
    [EFFECTIVE] [date] NOT NULL,
    [FINISHED] [date] NULL,
PRIMARY KEY CLUSTERED 
(
    [STORENUM] ASC,
    [EFFECTIVE] ASC
)WITH (PAD_INDEX  = …
Run Code Online (Sandbox Code Playgroud)

trigger database-design sql-server t-sql

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

Delete 语句上的死锁

SQL Server 作业运行时出现死锁。死锁发生在一个简单的 DELETE 语句上。我原以为必须运行 SELECT/UPDATE 查询才能导致死锁?但看起来是 DELETE/DELETE 死锁...

我正在寻找的是为什么我会遇到 DELETE/DELETE 死锁。这是(据我所知)传入不同的参数。

有任何想法吗?谢谢。

deadlock-list
2014-05-20 07:30:09.66 spid25s      deadlock victim=process409048
2014-05-20 07:30:09.66 spid25s       process-list
2014-05-20 07:30:09.66 spid25s        process id=process409048 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127294 waittime=4352 ownerId=629860973 transactionname=DELETE lasttranstarted=2014-05-20T07:30:05.307 XDES=0x397219620 lockMode=U schedulerid=5 kpid=3792 status=suspended spid=150 sbid=0 ecid=3 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:05.307 lastbatchcompleted=2014-05-20T07:30:05.307 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed (2) xactid=629860973 currentdb=12 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
2014-05-20 07:30:09.66 spid25s         executionStack
2014-05-20 07:30:09.66 spid25s          frame procname=adhoc line=1 stmtstart=68 sqlhandle=0x020000000b887a18f75d0aa07c25a9b8630fca696aa0e5d2
2014-05-20 07:30:09.66 spid25s     DELETE FROM dbo.UserDetailsData WHERE        (Username = …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock

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