小编Pet*_*ock的帖子

从 SQL 2005 [SQL_Latin1_General_CP1_CI_AS] 迁移到 2008 - 使用“向后兼容性”会丢失任何功能吗

我们正在从 SQL 2005 [Instance and DB has collat​​ion of SQL_Latin1_General_CP1_CI_AS] 迁移到 SQL 2008 [默认为Latin1_General_CI_AS]。

我完成了 SQL 2008 R2 安装,并使用了默认Latin1_General_CI_AS排序规则,数据库的恢复仍然在SQL_Latin1_General_CP1_CI_AS. 发生了例外的问题 -Latin1_General_CI_AS数据库 所在的 #temp 表, SQL_Latin1_General_CP1_CI_AS这就是我现在所在的位置 - 我现在需要关于陷阱的建议。

在安装 SQL 2008 R2 时,我可以选择在安装时使用'SQL Collation, used for backwards compatibility',我可以选择与 2005 数据库相同的排序规则:SQL_Latin1_General_CP1_CI_AS

  1. 这将使我不会遇到#temp 表的问题,但是有陷阱吗?

  2. 如果不使用 SQL 2008 的“当前”归类,我会失去任何功能或特性吗?

  3. 当我们从 2008 年迁移到 SQL 2012 时(例如 2 年后)呢?那我会有问题吗?
  4. 我会在某个时候被迫去Latin1_General_CI_AS吗?

  5. 我读到一些 DBA 的脚本完成了完整数据库的行,然后使用新的排序规则将插入脚本运行到数据库中 - 我对此非常害怕和警惕 - 你会建议这样做吗?

sql-server-2005 sql-server-2008 collation

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

了解 varchar(max) 8000 列以及为什么我可以在其中存储超过 8000 个字符

这个微软文档,+

n 定义字符串长度,可以是 1 到 8,000 之间的值。max 表示最大存储大小为 2^31-1 字节(2 GB)。存储大小为输入数据的实际长度+2 个字节。

请帮助我理解这一点。

varchar 的最大字符数似乎是8000,这远低于2GB数据的价值。

我看到在varchar(max)特定表的这一列中有len(mycolumn)> 100 000 的记录。因此我知道我可以8000varchar(max)列中输入更多字符。

问题 1:8000角色是如何发挥作用的,我应该在哪里知道它?

问题 2: .net datareader 查询此列是否总是返回包含 100 000+ 个字符的完整结果?

sql-server varchar max

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

每个人都警告不要缩小数据库,但它对我有用吗?1 GB db,现在删除了表 100 MB

每个人都警告不要缩小数据库,例如 SQLAuthority

但在我的情况下它会是一个有效的选择吗?数据库最初超过 1 GB,但是从其中删除了一个表(移动到另一个数据库),当我备份它时,数据库现在是 100 MB,而 MDF 仍然超过 1 GB。

如果我缩小数据库,然后重建所有索引怎么办?这一切还是禁忌吗?

sql-server-2005 sql-server shrink

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

运行总计,当客户更改时重置(保留现有的行号)- 包括尝试

我有一个表,其中 RowNumber 是本质。它有一系列客户端,以及该客户端的运行总数 - 每次客户端更改时都会重置。例如

client  rownr   amount  runtotal
Company A   1   1.00    1.00
Company A   2   1.00    2.00  1+1 = 2
Company A   3   5.00    7.00  2+5 = 7
Company B   4   3.00    3.00  Reset Because Customer B <> Previous Row Customer A
Company A   5   1.00    1.00  Reset Because Customer A <> Previous Row Customer B
Company B   6   2.00    2.00  Reset Because Customer B <> Previous Row Customer A
Company B   7   1.00    3.00  2+1 = 3 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008-r2

7
推荐指数
2
解决办法
7802
查看次数

操作数类型冲突:我的第一个带有整数列表的用户定义类型,如何通过 SSMS 进行测试

我在这里找到了这个美妙的代码

    CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);

    GO 
    CREATE PROCEDURE [dbo].[sp_UseStringList]
        @list StringList READONLY
    AS
    BEGIN
        -- Just return the items we passed in
        SELECT l.Item FROM @list l;
    END

    GO
Run Code Online (Sandbox Code Playgroud)

但我不知道如何通过 SSMS 进行测试

declare @list   StringList  = '1,2,3,4,5'
exec sp_UseStringList @list
Run Code Online (Sandbox Code Playgroud)

给出错误:

Operand type clash: varchar is incompatible with StringList
Run Code Online (Sandbox Code Playgroud)

我该如何测试列表“1,2,3,4,5”

sql-server-2008 user-defined-type

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

SQLPackage:在没有用户的情况下导入或导出 SQL Azure BACPAC

我知道如何使用SQLpackage.exe. 我可以从 SQL Azure 导出并创建 bacpac。我也可以通过SQLPackage.exe.

我想在没有数据库中的用户的情况下导出或导入。用户正在阻止正常导入失败。

导入数据库时​​出错:无法导入包。

错误 SQL72014 无法授予、拒绝或删除特殊角色的权限 在此处输入图片说明

我无法在导出之前删除用户,也无法将其从导入中排除。

目前我们必须备份数据库,在 SQLAzure 上恢复它,删除第二个数据库上的使用,然后从恢复的数据库创建一个 bacpac。

我该如何解决这个问题?我可以在我的 sqlpackage 中使用IgnoreUserSettingsObjects吗?我尝试使用参数但它失败了

sql-server azure-sql-database bacpac

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

经过 5 年的工作,SQL Server 2k5 表现在锁定,无需对数据库进行任何更改

我有一张桌子:OrderDetails

5 年来,只发生了奇怪的死锁。如果它发生了,它发生在OrderDetails表上的索引上现在突然间,死锁无处不在 - 发生的时间很短。我们没有对应用程序或数据库进行任何更改 - 每周都会重建索引。

问题是OrderDetails现在桌子有时会被锁住,所有的地狱都崩溃了

有人可以帮忙看看他们是否从日志中发现任何东西:我怎样才能摆脱整个OrderDetails表上的 objectLock ?为什么表会锁定 - 过去只有索引会导致死锁。这是否意味着索引未能找到合适的记录,现在整个表都被锁定了?

这是一个Update和一个Select在这里死锁,并且被锁定的行不相关 - 它们没有相同的参考号或OrderID

 spid18s,Unknown,waiter id=process91bb58 mode=X requestType=convert
 spid18s,Unknown,waiter id=process9a9018 mode=S requestType=convert
 spid18s,Unknown,waiter-list
 spid18s,Unknown,owner id=process9a9018 mode=IS
 spid18s,Unknown,owner id=process91bb58 mode=IX
 spid18s,Unknown,owner-list
 spid18s,Unknown,objectlock lockPartition=0 objid=1194487334 subresource=FULL dbid=5 objectname=CompZ.dbo.OrderDetails id=lock32163640 mode=IX associatedObjectId=1194487334
 spid18s,Unknown,resource-list
 spid18s,Unknown,Proc [Database Id = 5 Object Id = 711009614]
 spid18s,Unknown,inputbuf
 spid18s,Unknown,OrderNoRef = @OrderNoRef and ClientID = @ClientID and  OrderNo <> @OrderNo
 spid18s,Unknown,where
 spid18s,Unknown,select  Distinct OrderNoRef …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 deadlock

5
推荐指数
1
解决办法
924
查看次数

为什么我必须备份事务日志两次才能缩小?

这个问题在专家交流中尝试了两次,但没有真正的答案。

我知道我不应该缩小日志文件 - 这不是问题。

如果你想回答一个人不应该这样做 - 这已经被多次确认,是的,这不是这个问题的目标。

设置为简单备份也不是一个选项。

多年来一直困扰着我 - 事实上我现在知道为什么应该备份它两次。

我最近看到第一个日志文件每次都能够在第一次尝试时缩小 - 令人难以置信。我向那个人询问了这件事,我只能说“在发布之前重新组织”——我不知道他指的是什么。我无法再次与他联系。

我从 EE 上的现有帖子中知道这一点:“收缩删除日志的非活动部分。为了不活动,必须截断日志,这作为日志备份的一部分发生。

但是,事务日志由许多以循环方式使用的虚拟日志文件组成。只能修剪文件末尾的虚拟日志,因此如果 SQL Server 当前正在使用最后一个虚拟日志,则无法删除任何内容。sql 7 中的旧修复是运行一个脚本,该脚本运行足够多的虚拟事务来填充日志并将指针环绕到第一个虚拟日志(如果您愿意,仍然可以使用此方法)。
http://support.microsoft.com/kb/256650/EN-US

DBCC 现在为您执行此操作,但仍需要额外的步骤再次截断日志,以便可以删除非活动空间”

来自另一位用户:“我所要做的就是停止上次管理员在数据库维护计划中留下的自动优化和完整性检查。”

sql-server backup logs truncate

4
推荐指数
1
解决办法
2242
查看次数

查询具有 where (a = a) 或 (b = b) - 导致索引扫描的第二部分。包括完整示例

当两个值(原始表及其查找的表)都是整数时,我一直试图弄清楚为什么这个查询(对整数)使用索引扫描。

第一部分用于用值填充表格。

第二部分是我正在处理的搜索查询。如果在查询上运行执行计划,您将看到即使intcol上有一个索引,并且 #temp 表的类型为int,它仍然使用索引扫描并扫描所有 298 000 行。

问题是我正在使用的查询,它具有 (a = a) 或 (b = b)

当我取出“或(b = b)”时,它不会进行索引扫描。但是我需要“or (b == b)”来完成这个复杂的查询工作。

导致索引扫描的隐式转换

    CREATE TABLE dbo.TestImplicitConverts
(
  RowID int NOT NULL IDENTITY (1, 1),
  BigIntCol bigint NOT NULL,
  BitCol bit NOT NULL,
  CharCol char(10) NOT NULL,
  DateTimeCol datetime NOT NULL,
   DecimalCol decimal(10, 2) NOT  NULL , 
  FloatCol float(53) NOT  NULL  ,
  IntCol int NOT NULL,
  MoneyCol money NOT NULL,
  NCharCol nchar(10) NOT NULL,
  NumericCol numeric(10, 2) …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2005

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

索引上的行锁会导致键锁吗?:事务(进程 ID xy)已死锁,包括示例

我目前遇到错误(通过 traceID 1222 记录):

keylock hobtid= 8205698989 objectname=mydb.dbo.Orders indexname = _dta_Index_Orders_5_120345_K1_K2_7_1 id=lock43fe181 mode=S AssociatedObjectID = 8205698989 
waiterID = process 85b2566 mode=S requestType=wait
waiter-list
keylock hobtid= 820562208 objectname=mydb.dbo.Orders indexname = pk_Orders_OrderID id=lock4012341 mode=X AssociatedObjectID = 820562208 
resource-list
Update Orders set OrderType = 1 where OrderID = 52000 and DeliveryID = 1236
inputbuf
Update [Orders] set [OrderType] = @1 where [OrderID] = @2 and [DeliveryID] = @3
Run Code Online (Sandbox Code Playgroud)

桌子:

Orders
Run Code Online (Sandbox Code Playgroud)

列:

OrderID         int (pk)
OrderNumber     Varchar(50)
OrderDate       datetime
OrderType       int
DeliveryID  int
DateDelivered …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2005

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