标签: sql-server

在SQL Server Management Studio中编辑表后保存更改

如果我想保存表中的任何更改,以前保存在SQL Server Management Studio中(表中没有数据),我收到一条错误消息:

不允许保存更改.您所做的更改需要删除并重新创建以下表.您已对无法重新创建的表进行了更改,或者启用了"禁止保存需要重新创建表的更改"选项.

什么可以防止表格被轻易编辑?或者,这是SQL Server Management Studio要求重新创建表进行编辑的常用方法吗?它是什么 - 这个"选项防止保存更改"

sql sql-server ssms database-table

252
推荐指数
7
解决办法
21万
查看次数

如何检查SQL Server中是否存在数据库?

使用TSQL检查SQL Server上是否存在数据库的理想方法是什么?似乎有多种方法可以实现这一点.

t-sql database sql-server

251
推荐指数
5
解决办法
24万
查看次数

如何检查Sql server中是否存在约束?

我有这个sql:

ALTER TABLE dbo.ChannelPlayerSkins
    DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
Run Code Online (Sandbox Code Playgroud)

但显然,在我们使用的其他一些数据库中,约束具有不同的名称.如何检查名称是否存在约束FK_ChannelPlayerSkins_Channels.

sql-server information-schema system-tables

250
推荐指数
7
解决办法
35万
查看次数

在一列上选择DISTINCT

使用SQL Server,我有......

ID  SKU     PRODUCT
=======================
1   FOO-23  Orange
2   BAR-23  Orange
3   FOO-24  Apple
4   FOO-25  Orange
Run Code Online (Sandbox Code Playgroud)

我想要

1   FOO-23  Orange
3   FOO-24  Apple
Run Code Online (Sandbox Code Playgroud)

这个问题不是让我在那里.如何在一列上选择DISTINCT?

SELECT 
[ID],[SKU],[PRODUCT]
FROM [TestData] 
WHERE ([PRODUCT] = 
(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%')) 
ORDER BY [ID]
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server distinct

248
推荐指数
7
解决办法
38万
查看次数

"防止需要重新创建表的保存更改"负面影响

前言

我今天在SQL Server 2008中修改了一个列,将数据类型从货币(18,0)更改为(19,2).

我收到错误"您所做的更改需要从SQL Server中删除并重新创建以下表".

在您争相回答之前,请阅读以下内容:

我已经知道工具►选项►设计器►表和数据库设计器中有选项►取消选中 "禁止保存需要重新创建表的更改" . 通过五次单击阻止保存需要重新创建表的更改 ......所以不要回答!

实际问题

我的实际问题是针对其他事情,如下:

这样做有任何负面影响/可能的缺点吗?

当取消选中此框时,表是否会被实际删除并自动重新创建?

如果是这样,表格是否复制了源表的100%完全复制品?

sql-server database-design sql-server-2005 sql-server-2008

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

SQL Server中的INNER JOIN与LEFT JOIN性能

我已经为9个表创建了使用INNER JOIN的SQL命令,无论如何这个命令需要很长时间(超过五分钟).因此,我的民众建议我将INNER JOIN更改为LEFT JOIN因为LEFT JOIN的表现更好,尽管我所知道的第一次.我改变后,查询的速度显着提高.

我想知道为什么LEFT JOIN比INNER JOIN快?

我的SQL命令如下所示: SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D依此类推

更新: 这是我的架构的简要说明.

FROM sidisaleshdrmly a -- NOT HAVE PK AND FK
    INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK
        ON a.CompanyCd = b.CompanyCd 
           AND a.SPRNo = b.SPRNo 
           AND a.SuffixNo = b.SuffixNo 
           AND a.dnno = b.dnno
    INNER JOIN exFSlipDet h -- PK = CompanyCd, FSlipNo, FSlipSuffix, FSlipLine
        ON a.CompanyCd …
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance

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

SQL Server:查询速度快,但程序速度慢

查询运行速度很快:

DECLARE @SessionGUID uniqueidentifier
SET @SessionGUID = 'BCBA333C-B6A1-4155-9833-C495F22EA908'

SELECT *
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
Run Code Online (Sandbox Code Playgroud)

子树成本:0.502

但是将相同的SQL放在存储过程中运行速度很慢,并且执行计划完全不同

CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
SELECT *
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank

EXECUTE ViewOpener @SessionGUID
Run Code Online (Sandbox Code Playgroud)

子树成本:19.2

我跑了

sp_recompile ViewOpener
Run Code Online (Sandbox Code Playgroud)

它仍然运行相同(严重),我也已将存储过程更改为

CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS
SELECT *, 'recompile please'
FROM Report_Opener
WHERE SessionGUID = @SessionGUID
ORDER BY CurrencyTypeOrder, Rank
Run Code Online (Sandbox Code Playgroud)

然后再回来,试图真正欺骗它重新编译.

我已经删除并重新创建存储过程以使其生成新计划.

我尝试使用一个诱饵变量强制重新编译,并防止参数嗅探:

CREATE PROCEDURE dbo.ViewOpener @SessionGUID uniqueidentifier AS

DECLARE …
Run Code Online (Sandbox Code Playgroud)

sql-server performance stored-procedures

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

表中主键的最佳实践是什么?

在设计表时,我养成了一个习惯,就是让一个列是唯一的,并且我制作了主键.这取决于要求以三种方式实现:

  1. 自动递增的标识整数列.
  2. 唯一标识符(GUID)
  3. 可用作行标识符列的短字符(x)或整数(或其他相对较小的数字类型)列

数字3将用于相当小的查找,主要是可能具有唯一静态长度字符串代码的读取表,或者诸如年份或其他数字的数字值.

在大多数情况下,所有其他表将具有自动递增整数或唯一标识符主键.

问题:-)

我最近开始使用没有一致行标识符的数据库,主键目前在各个列上进行聚类.一些例子:

  • 日期时间/字符
  • 日期时间/整数
  • 日期时间/ VARCHAR
  • 炭/ NVARCHAR/nvarchar的

这有一个有效的案例吗?我总是会为这些案例定义一个标识或唯一标识符列.

此外,还有许多表没有主键.这有什么正当理由?

我试图理解为什么桌子的设计原样,对我来说这似乎是一个很大的混乱,但也许有充分的理由.

第三个问题可以帮助我解释答案:在使用多列构成复合主键的情况下,这种方法与代理/人工密钥相比有特定的优势吗?我主要考虑的是性能,维护,管理等方面?

sql database sql-server relational

245
推荐指数
11
解决办法
15万
查看次数

删除后重置SQL Server中的AutoIncrement

我从SQL Server数据库中的表中删除了一些记录.现在ID从101到1200.我想再次删除记录,但我希望ID能够回到102.有没有办法在SQL Server中执行此操作?

sql-server auto-increment delete-row

245
推荐指数
8
解决办法
33万
查看次数

如何在SQL中选择没有时间的日期

当我在SQL中选择日期时,它将返回为 2011-02-25 21:17:33.933.但我只需要Date部分2011-02-25.我怎样才能做到这一点?

sql sql-server sql-server-2005

243
推荐指数
9
解决办法
58万
查看次数