小编Aar*_*and的帖子

插入多个查询是否与单个查询花费相同的时间?

我有一个要求,我必须插入很多行。对于插入,我们像这样使用

insert into emp(name,age) values('abc',12);
Run Code Online (Sandbox Code Playgroud)

这将只插入一行。对于插入多行,我们可以多次编写插入查询或编写具有多个值的单个查询。例如

条件 1

insert into emp(name,age) values('abc1',121);
insert into emp(name,age) values('abc2',122);
insert into emp(name,age) values('abc3',12);
Run Code Online (Sandbox Code Playgroud)

条件2

insert into emp(name,age) values('abc',12),('abc2',122),('abc3',12);
Run Code Online (Sandbox Code Playgroud)

我的问题是上面的(条件 1 和条件 2)都需要时间吗?我猜条件 2 比条件 2 花费的时间少。如果我的猜测是真的,那么原因是什么?

performance sql-server insert t-sql sql-server-2012

3
推荐指数
2
解决办法
5151
查看次数

是否可以在 Windows 7 上安装 SQL Server 2014 Enterprise?

我计划在 64 位 HP 工作站上安装 SQL Server 2014 Enterprise Edition。

我阅读了以下软件和硬件要求:

根据该页面,企业版似乎不支持 Windows 7。参考正确吗?

sql-server installation sql-server-2014

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

DROP LOGIN 在 SQL Server 2014 上失败

我们有一个所有者为“dbowner”的数据库。我们的安装过程删除用户“dbowner”的登录名并重新创建它。

在任何其他版本的 SQL Server 上,以下 SQL 查询成功:

USE [master]
DROP LOGIN 'dbowner'
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 2014 上,相同的查询返回以下错误:

登录 'dbowner' 拥有一个或多个数据库。在删除登录之前更改数据库的所有者。

谁能解释为什么这在 SQL Server 2014 上会有所不同?删除登录适用于所有其他版本的 SQL Server(2005、2008 和 2012)。

是否有任何设置可以强制在 SQL Server 2014 上使用相同的设置?

更新:

我可以用一个使用 Windows 用户的例子来复制这个。有任何想法吗?

CREATE LOGIN [comp\winuser] FROM WINDOWS;
GO
CREATE DATABASE mydb;
GO
ALTER AUTHORIZATION ON DATABASE::mydb TO [comp\winuser];
GO
DROP LOGIN [comp\winuser];
GO
Run Code Online (Sandbox Code Playgroud)

更新 2:

谢谢您的意见。我同意删除所有者的登录名是不可取的(但除 SQL Server 2014 外,其他地方的 Windows 用户都可以使用)。然而,我们的安装脚本目前依赖于它,极其复杂的数据库安装过程是 15 年前某个人制作的(他不再与我们合作了)。如果可能(只要它有效),我们希望避免更改该领域。

在我看来,我们有三个选择:

  1. 使 SQL 2014 像以前的版本一样运行并保持脚本不变。我们更喜欢这个选项,我在这里发帖看看是否可以做到。
  2. 将所有者更改为其他用户,删除并创建所有者登录并将所有者移回。这是一个黑客,但可能会奏效。
  3. 改变我们处理用户的方式并停止放弃所有者的登录。这将是正确的方法,但也是最大的变化。

security sql-server users logins sql-server-2014

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

如何在多个实例上配置 SQL Server 端口?

我有一个名为 SQLDWDEV01 的服务器,有 2 个实例:default 和 UAT。

对于使用端口 1433 的默认实例,一切正常。

但是,根据下图配置的 UAT 实例无法从本地计算机连接。

我可以访问,并且启用了远程连接。

我错过了什么才能连接到这个实例?

如果这个问题不完整,请提问,我会回复。

没有防火墙。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

我目前遇到的错误消息是:

无法连接到 sqldwdev01\UAT。
与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)(Microsoft SQL Server,错误:-1)

sql-server installation network tcpip sql-server-2014

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

将两个值相加时仅显示大于某个数字的结果

我有一个查询将同一个表中的两个值相加,然后计算一个作为另一个的百分比

select account_no,
  100*((sum(COMMISSION/100)) / (SUM(AMOUNT/100)))
from accounts etc
Run Code Online (Sandbox Code Playgroud)

我想要做的只是返回该值大于一定数量的结果(在本例中为 4)。如果我在 where 子句中添加一些内容,例如:

where 100*((sum(COMMISSION/100)) / (SUM(AMOUNT/100))) > 4
Run Code Online (Sandbox Code Playgroud)

我收到错误:

聚合可能不会出现在 WHERE 子句中...

我希望有一种简单的方法可以解决这个问题,但我还没有学到。有任何想法吗?

sql-server-2008

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

空白数据库的数据库架构很大。20MB

仅具有架构的空白数据库很大是否正常?或者有没有办法减少初始数据库的大小?

schema sql-server sql-server-2008-r2

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

通过链接服务器查询 sys.master_files

通过链接服务器查询 sys.master_files,我没有得到任何结果。

为什么?我如何解决这个问题?

sql-server metadata linked-server

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

始终以特定顺序获取 3 条记录

我有一个查询,可以获取 3 本书(ABC1、ABC2、ABC3)及其详细信息。我需要它们按特定顺序进行旋转,因此我有一个相同的行号列。人们不读/一些/所有的书。

桌子:

StudentID|||BookName|||RowNumber
1000|||ABC1|||27
1000|||ABC2|||31
1000|||ABC3|||28
1005|||ABC2|||28
1005|||ABC3|||20
1005|||ABC1|||25
1006|||ABC1|||12
1006|||ABC2|||14
1006|||ABC3|||15
Run Code Online (Sandbox Code Playgroud)

所以我的数据会像上面那样。我需要为每个学生,ABC1,ABC2,ABC3 应该按顺序和 Rownumber 按降序更新。所以对于学生 1000:

ABC1||27,ABC2||28,ABC3||31
Run Code Online (Sandbox Code Playgroud)

对于学生 1005:

ABC1||20,ABC2||25,ABC3||28
Run Code Online (Sandbox Code Playgroud)

对于 1006:没有变化(它们的顺序已经正确)。

我将上述所有数据放入一个临时表中,并将主数据放入另一个临时表中。我正在尝试编写更新语句,但没有按预期工作。我需要帮助。

sql-server sql-server-2008-r2 sql-server-2012

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

在相关的产品折扣表中插入最多 10 个缺失的产品

我有两个表:productsproducts_discounts。如果某个产品被指定为“前 10 名”产品,并且在 中缺少定义的折扣products_discounts,我想products_discounts为每个缺少的记录插入一条记录。插入的值将由product_idINSERT INTO中的和另外两个硬编码值组成。

产品
id、product_id、名称、top_ten

Products_Discounts
id、product_id、discount_amount、discount_description

以下是我计划如何手动执行此操作,但由于我将每年重复此过程几次,因此我想看看这是否可以通过几行 SQL 完成。

(1) 获取符合我的条件的产品列表。

SELECT p.product_id, pd.discount_amount FROM products AS p
LEFT OUTER JOIN products_discounts AS pd
    ON p.product_id = pd.product_Id
WHERE p.top_ten = 1
    AND pd.product_id IS NULL
Run Code Online (Sandbox Code Playgroud)

(2) 使用文本编辑器构建每个单独的 INSERT INTO 语句。我会使用步骤 1 的输出来获取product_ids 但其他两个值将保持不变(硬编码)。

INSERT INTO products_discounts (product_id, discount_amount, discount_description)
VALUES ('<product_id goes here>', 10, 'Top 10 Product')
Run Code Online (Sandbox Code Playgroud)

这些步骤可以组合成几行SQL吗?

sql-server t-sql

3
推荐指数
2
解决办法
1035
查看次数

这个 ALTER TABLE 语句需要多长时间?

Alter TABLE [XXX] Alter column [YYY] [varchar](max) NULL
Run Code Online (Sandbox Code Playgroud)

认为

  • 有45GB的数据空间和2GB的索引空间;
  • 该表中大约有 300 万行;
  • YYY 列varchar(8000)现在可以更新(可写)。
  • 该表还有大约 30 个其他列。
  • 这台机器上有来自其他数据库和表的大约3000G数据。

一些其他信息:

  • 99.99% 的行在NULLthis 中varchar(8000)
  • Web 应用程序可能每分钟访问该表 5 次;
  • 硬件是企业级的(8 核 CPU 和 256GB RAM)。
  • 这台机器上还有其他的表和数据库,大约3000GB的数据。

相关@@VERSION详情:

Microsoft SQL Server 2014 - 12.0.4422.0 (X64)
企业版(64 位)

sql-server alter-table ddl sql-server-2014

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