我正在尝试使以下 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 中的对象资源管理器中,选择外键约束并为其编写脚本时,会生成以下代码。
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”的目的是什么?它是否运行似乎并不重要。它不会在现有的坏数据上失败,也不会改变将在新数据上强制执行的约束。
谢谢!
我们为一个应用程序总共使用了 6 个数据库,并且我们只能在所有 6 个自动增长数据库之间共享 4TB 的空间(通过 SAN 存储)。
我想为单个数据库编写一个查询(报告),指示 SQL Server Management Studio 中的任务 > 收缩 > 数据库选项下的“当前分配的空间”和“可用的可用空间”属性。
然后我想将这些数字转换为 TB 并对每个数据库进行总计,以粗略估计我们还剩下多少空间。可以通过 T-SQL 查询访问这些字段吗?如果是这样,查询会是什么样子?

服务器 (SQL Server 2008) 的 tempdb 每月数次增加到 500GB+。是否可以找出导致此问题的 SQL 语句?问题通常不是由create table #temp...; insert into #temp...或select ... into #temp...复杂的连接引起的。
某些 tempdb 文件的初始大小每次也会自动设置为更大的值。如何预防?
有时缓存的计划会阻止调整/缩小文件的大小。如何找到哪一个持有tempdb?
我有一个字段来存储一些数据,该字段声明为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 位。
在我们当前的项目中,它经常发生,我们需要将列扩展几个字符。从varchar(20)到varchar(30)等等。
在现实中,真正重要的有多少?这优化有多好?只允许 100 或 200 甚至 500 个字符用于正常的“输入”字段有什么影响?一封电子邮件只能有 320 个字符,所以可以 - 有一个很好的限制。但是如果我将它设置为 200,我会得到什么,因为我不希望电子邮件地址比这更长。
通常我们的表不会超过 100.000 行,最多 20 或 30 个这样的列。
我们现在使用 SQL Server 2008,但了解不同的数据库如何处理这个问题会很有趣。
如果影响非常低 - 正如我所期望的那样,这将有助于获得一些好的论据(有链接支持?)来说服我的 DBA,这种长期的偏执并不是真正必要的。
如果是的话,我是来学习的:-)
在网上搜索后,我找不到原因
为什么我们需要在 SQL Server 中重建和重组索引?
当我们重建和重组时,内部会发生什么?
网站上的一篇文章说:
当索引碎片大于 40% 时应该重建索引。当索引碎片在 10% 到 40% 之间时,应该重新组织索引。索引重建过程使用更多 CPU 并锁定数据库资源。SQL Server 开发版和企业版有 ONLINE 选项,可以在重建 Index 时开启。ONLINE 选项将在重建期间保持索引可用。
我无法理解这一点,虽然它说WHEN要这样做,但我想知道WHY我们是否需要重建和重组索引?
我需要找到一种方法来获取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 R2 Express 默认排序规则?
有没有办法使用 SQL Server Management Studio 的可视化界面来做到这一点?在服务器属性窗口(以及相应的数据库属性窗口)中,此属性不可编辑。
我有一个大约有 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 ×10
sql-server ×8
t-sql ×2
collation ×1
datatypes ×1
disk-space ×1
group-by ×1
tempdb ×1
varchar ×1