标签: sql-server-2008

为什么 GROUP BY 语句中的通配符不起作用?

我正在尝试使以下 SQL 语句起作用,但出现语法错误:

SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.*
Run Code Online (Sandbox Code Playgroud)

这里,A 是一个有 40 列的宽表,如果可能,我想避免在 GROUP BY 子句中列出每个列名。我有很多这样的表,我必须在这些表上运行类似的查询,所以我必须编写一个存储过程。解决这个问题的最佳方法是什么?

我正在使用 MS SQL Server 2008。

sql-server-2008 sql-server t-sql group-by

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

更改表检查约束

在 SQL Server 中的对象资源管理器中,选择外键约束并为其编写脚本时,会生成以下代码。

     USE [MyTestDatabase]
     GO

     ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID])
     REFERENCES [dbo].[T1] ([T1ID])
     GO

     ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1]
     GO
Run Code Online (Sandbox Code Playgroud)

最后一条语句“ALTER TABLE CHECK CONSTRAINT”的目的是什么?它是否运行似乎并不重要。它不会在现有的坏数据上失败,也不会改变将在新数据上强制执行的约束。

谢谢!

sql-server-2008 check-constraints

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

查询以报告磁盘空间分配和已用空间

我们为一个应用程序总共使用了 6 个数据库,并且我们只能在所有 6 个自动增长数据库之间共享 4TB 的空间(通过 SAN 存储)。

我想为单个数据库编写一个查询(报告),指示 SQL Server Management Studio 中的任务 > 收缩 > 数据库选项下的“当前分配的空间”和“可用的可用空间”属性。

然后我想将这些数字转换为 TB 并对每个数据库进行总计,以粗略估计我们还剩下多少空间。可以通过 T-SQL 查询访问这些字段吗?如果是这样,查询会是什么样子?

收缩数据库对话框

sql-server-2008 sql-server disk-space

30
推荐指数
4
解决办法
13万
查看次数

如何找到导致tempdb增长的SQL语句?

服务器 (SQL Server 2008) 的 tempdb 每月数次增加到 500GB+。是否可以找出导致此问题的 SQL 语句?问题通常不是由create table #temp...; insert into #temp...select ... into #temp...复杂的连接引起的。

某些 tempdb 文件的初始大小每次也会自动设置为更大的值。如何预防?

有时缓存的计划会阻止调整/缩小文件的大小。如何找到哪一个持有tempdb?

sql-server-2008 sql-server tempdb

29
推荐指数
1
解决办法
7万
查看次数

Varchar(max) 字段在 8000 个字符后截断数据

我有一个字段来存储一些数据,该字段声明为varchar(max). 据我所知,这应该是存储2^31 - 1字符,但是当我输入超过 8000 个字符的内容时,它会切断其余部分。

我已经验证所有数据都包含在我的更新语句中,并且查询在其他地方看起来都很好,但是当我选择数据时,它已被切断。

当我在我的网站上显示数据以及使用 SSMS 到select content from table.

select DATALENGTH (content) from table 返回 8000。

我使用这个设置数据:update table set content = 'my long content' where id = 1。内容确实有很多 HTML,但我看不出这会导致问题。我唯一能看到的是我正在做的事情是替换所有内容"''因为这是用户输入的内容(不记得我现在为什么这样做了)。

我确实通过删除内容中的所有单引号设法使内容正确输入,所以我认为我的数据而不是数据库发生了一些奇怪的事情。

我应该对查询做一些特别的事情来使用一个varchar(max)字段吗?

使用:SQL Server 2008 (10.50) 64 位。

sql-server-2008 sql-server varchar

29
推荐指数
1
解决办法
6万
查看次数

长列如何影响性能和磁盘使用?

在我们当前的项目中,它经常发生,我们需要将列扩展几个字符。从varchar(20)varchar(30)等等。

在现实中,真正重要的有多少?这优化有多好?只允许 100 或 200 甚至 500 个字符用于正常的“输入”字段有什么影响?一封电子邮件只能有 320 个字符,所以可以 - 有一个很好的限制。但是如果我将它设置为 200,我会得到什么,因为我不希望电子邮件地址比这更长。

通常我们的表不会超过 100.000 行,最多 20 或 30 个这样的列。

我们现在使用 SQL Server 2008,但了解不同的数据库如何处理这个问题会很有趣。

如果影响非常低 - 正如我所期望的那样,这将有助于获得一些好的论据(有链接支持?)来说服我的 DBA,这种长期的偏执并不是真正必要的。

如果是的话,我是来学习的:-)

sql-server-2008 database-design datatypes

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

为什么我们需要重建和重组 SQL Server 中的索引

在网上搜索后,我找不到原因

  1. 为什么我们需要在 SQL Server 中重建和重组索引?

  2. 当我们重建和重组时,内部会发生什么?

网站上的一篇文章说:

当索引碎片大于 40% 时应该重建索引。当索引碎片在 10% 到 40% 之间时,应该重新组织索引。索引重建过程使用更多 CPU 并锁定数据库资源。SQL Server 开发版和企业版有 ONLINE 选项,可以在重建 Index 时开启。ONLINE 选项将在重建期间保持索引可用。

我无法理解这一点,虽然它说WHEN要这样做,但我想知道WHY我们是否需要重建和重组索引?

sql-server-2005 sql-server-2008 sql-server

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

如果为正,则对所有项目求和。如果为负,则返回每一个

我需要找到一种方法来获取SUM()所有正值的所有正值num并返回SUM()所有正数的值和每个负数的单独行。下面是一个示例 DDL:

Create Table #Be
(
    id int
    , salesid int
    , num decimal(16,4)
)

Insert Into #BE Values
    (1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00)
    , (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23)
    , (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32)
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出(每个 salesid 的正数SUM()和负数得到单独的一行返回):

salesid    num
1          26.32
1          -13.00
2          47.35
3          -12.32
3          -43.23
3          -2.32
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql

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

如何更改 SQL Server 排序规则

如何更改整个服务器和特定数据库的 SQL Server 2008 R2 Express 默认排序规则?

有没有办法使用 SQL Server Management Studio 的可视化界面来做到这一点?在服务器属性窗口(以及相应的数据库属性窗口)中,此属性不可编辑。

sql-server-2008 sql-server collation

27
推荐指数
3
解决办法
7万
查看次数

删除所有(1200 万)条记录后,SQL Server“空表”变慢了?

我有一个大约有 150 列的 SQL Server 2008 实例。我之前在这个表中填充了大约 1200 万个条目,但此后清除了该表以准备新的数据集。

但是,曾经在空表上立即运行的命令,例如count(*)select top 1000inSQL Management Studio现在需要花费大量时间才能运行。

SELECT COUNT(*) FROM TABLE_NAME 
Run Code Online (Sandbox Code Playgroud)

花了 11 多分钟才返回 0,SELECT TOP 1000花了将近 10 分钟才返回一张空桌子。

我还注意到我硬盘上的可用空间实际上已经消失了(从大约 100G 减少到 20G)。之间发生的唯一事情是我运行的一个查询:

DELETE FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

这世界到底怎么回事?!?

sql-server-2008 sql-server

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