标签: sql-server

错误消息“空值已被聚合或其他 SET 操作消除”中“SET”的含义

我今天在运行同事的脚本时看到了上面的“ANSI警告”消息(我不知道许多语句中的哪一个导致显示警告)。

过去我忽略了它:我自己避免空值,所以任何可以消除它们的东西在我的书中都是一件好事!然而,今天“SET”这个词真的对我大喊大叫,我意识到我不知道这个词在这种情况下应该是什么意思。

我的第一个想法是,基于它是大写的事实,它指的是SET关键字,意思是“赋值”,如

UPDATE <table> SET ...

...ON DELETE SET NULL...

SET IDENTITY_INSERT <table> ON
Run Code Online (Sandbox Code Playgroud)

根据 SQL Server 帮助,“ANSI 警告”功能基于 ISO/ANSI SQL-92,该规范仅在小节标题中使用了术语“设置操作”,因此在标题大小写中,数据分配部分。但是,在快速搜索错误消息后,我看到了一些示例,这些示例是SELECT看似不涉及赋值的查询。

根据 SQL Server 警告的措辞,我的第二个想法是隐含了 set 的数学含义。但是,我不认为 SQL 中的聚合严格来说是一种集合操作。即使 SQL Server 团队认为它是一个集合操作,把“集合”这个词放在大写的目的是什么?

在谷歌搜索时,我注意到一条 SQL Server 错误消息:

Table 'T' does not have the identity property. Cannot perform SET operation.
Run Code Online (Sandbox Code Playgroud)

这里同样的情况下的“SET操作”这个词只能指IDENTITY_INSERT属性的赋值,这让我又回到了最初的想法。

任何人都可以对此事有所了解吗?

sql-server

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

查找表的上次更新时间

查询:

SELECT 
    name AS TableName, 
    create_date AS CreatedDate, 
    modify_date as ModifyDate 
FROM sys.tables 
order by ModifyDate;
Run Code Online (Sandbox Code Playgroud)

...将告诉我上次创建和修改表的时间(从 DDL 的角度)。但我想知道上次从表中插入或删除实际数据的时间。是否可以在 SQL Server 中获得它?

sql-server-2008 sql-server

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

未在 dbo 架构下创建表

在 SSMS 中创建表时,我意识到如果执行以下语句:

CREATE TABLE [tableName];
Run Code Online (Sandbox Code Playgroud)

该表将在您自己的架构(而不是 dbo)下创建。因此,为了在 dbo 模式下创建它,您需要明确说明,如下所示:

CREATE TABLE [dbo].[tableName];
Run Code Online (Sandbox Code Playgroud)

有谁知道一种方法(例如服务器范围的设置),以便在创建表时不需要指定 [dbo] 部分?

sql-server sql-server-2008-r2

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

测试是否有任何列为 NULL

我试图找出一个简单的查询,我可以做一个简单的查询来测试一个大表是否有一个条目列表,在任何列中至少有一个空白(NULL/空)值。

我需要类似的东西

SELECT * FROM table AS t WHERE ANY(t.* IS NULL)
Run Code Online (Sandbox Code Playgroud)

我不想做

SELECT * FROM table AS t WHERE t.c1 = NULL OR t.c2 = NULL OR t.c3 = NULL
Run Code Online (Sandbox Code Playgroud)

这将是一个巨大的查询。

sql-server-2008 null sql-server

18
推荐指数
3
解决办法
12万
查看次数

我应该使用分离/复制/附加还是通过备份-恢复-重放来迁移数据?

我即将着手将数据库文件迁移到新的 SAN(从旧的 SAN),并且我有几个选项可以实现这一点。(1) 有人建议我调查将完整备份恢复到服务器上新数据库的工作量。但是,(2) 我最初的计划是通过分离然后重新附加数据库将文件从旧 SAN 复制到新 SAN。

我的直觉告诉我,我宁愿分离、复制和附加,因为它看起来更安全,但这可能只是我的天真。我不想在重命名数据库的过程中错过事务或以某种方式“破坏某些东西”。

我想我的问题是我对 BACKUP-RESTORE-Replay 选项的怀疑是否合理,以及该选项的其他优点或风险是什么?

sql-server migration sql-server-2000

18
推荐指数
2
解决办法
6084
查看次数

SQL Server如何解决将列更新为int时填满的事务日志

我有一个名为 SQL Server 2005 的表BRITTNEY_SPEARS_MARRIAGES,它具有以下列:

MarrigeId tinyint, 
HusbandName varchar(500),
MarrigeLength int
Run Code Online (Sandbox Code Playgroud)

现在我有另一张桌子 BRITTNEY_SPEARS_MARRIAGE_STORIES

StoryId int, 
MarriageId tinyint, 
StoryText nvarchar(max)
Run Code Online (Sandbox Code Playgroud)

问题是我们想将MarrigeId列int从 a更新为a tinyint。我们只是觉得布兰妮在一切都说完和做完之前会有很多婚姻。

现在BRITTNEY_SPEARS_MARRIAGE_STORIES表中有 1800 万行(嘿,这个女孩有一些问题),所以当我们进行更新时,事务日志填满了,我们的 SQL Server 框就死了。

我们怎样才能解决这个问题?

无论如何,是否可以说“嘿 SQL Server,我将更新此列并使其更大。相信我在此 SQL Server 上。请不要在尝试验证所有内容时填写事务日志?”

sql-server-2005 sql-server transaction-log

18
推荐指数
2
解决办法
6965
查看次数

在维度中动态定义范围

每次我决定构建一个立方体时,我都会遇到一个问题,但我还没有找到克服它的方法。

问题是如何允许用户自动定义一系列事物,而无需在维度中对它们进行硬编码。我将在一个例子中解释我的问题。

我有一个叫做客户的表:

表结构

这是表中的数据:

数据表

我想以枢轴样式显示数据,并将工资和年龄分组在定义的范围内,如下所示:

具有定义范围的数据表

我写了这个脚本并定义了范围:

SELECT [CustId]
      ,[CustName]
      ,[Age]
      ,[Salary]
      ,[SalaryRange] = case
        when cast(salary as float) <= 500 then
            '0 - 500'
        when cast(salary as float) between 501 and 1000 then
            '501 - 1000'
        when cast(salary as float) between 1001 and 2000 then
            '1001 - 2000'
        when cast(salary as float) > 2000 then
            '2001+'
        end,
        [AgeRange] = case
        when cast(age as float) < 15 then
            'below 15'
        when cast(age as float) between …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server ssas pivot

18
推荐指数
3
解决办法
1万
查看次数

FIFO queue table for multiple workers in SQL Server

I was attempting to answer the following stackoverflow question:

After posting a somewhat naive answer, I figured I'd put my money where my mouth was and actually test the scenario I was suggesting, to be sure I wasn't sending the OP off on a wild goose chase. Well, it's turned out to be much harder than I thought (no surprise there …

sql-server locking queue

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

备份 SQL Server 中的所有数据库

我有一个 Microsoft SQL Server 2005 DB 服务器。在数据库服务器中,我有大约 250 个用户数据库。我必须备份所有这些数据库。由于手动备份会消耗大量时间,我正在寻找一个批处理脚本或数据库脚本,它会自动备份所有 250 个数据库。任何人都可以帮忙吗?

sql-server-2005 sql-server backup

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

为其他数据库中的内部存储过程设置中央 CLR 存储过程/函数存储库库以使用?

我想使用我在 C# CLR 中开发的代码在系统上的所有数据库中使用,这样我就不必将每个数据库都设置为可信赖的并打开 CLR 并在每个数据库中保留一堆相同的代码.

从管理和安全的角度来看,有没有最好的方法来做到这一点?CLR 函数非常基础,如字符串断路器、电子邮件验证、url 编码/解码、base64 等。我希望每个数据库中只有 dbo 模式能够访问这些函数。

  1. 有没有简单的方法可以做到这一点?
  2. 我也不清楚是否嵌入了 CLR dll,如果我移动数据库,它会标记,或者我是否也必须移动 dll。

谢谢

sql-server-2008 sql-server sql-server-2008-r2 c# sql-clr

18
推荐指数
2
解决办法
1082
查看次数