标签: sql-server-2008

如何恢复复制的数据库

我正在使用事务复制来复制我们的实时数据库。这基本上是为了在服务器出现故障的情况下备份我们的数据库。

复制的数据库是只读的,因此我对其进行了备份、恢复和测试。

我立即注意到标识列不起作用。

例如,原始模式是这样的:

CREATE TABLE [dbo].[Inspection](
[InspectionID] [int] IDENTITY(1,1) NOT NULL,
[CarID] [int] NOT NULL,
Run Code Online (Sandbox Code Playgroud)

然后,在复制的副本上,它看起来像这样:

CREATE TABLE [dbo].[Inspection](
[InspectionID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[CarID] [int] NOT NULL,
Run Code Online (Sandbox Code Playgroud)

这意味着标识列已禁用,对吗?

有没有办法解决这个问题并使这个数据库本身成为一个独立的副本?

另外,我注意到没有传播外键。我知道有一些设置,但是既然标识列被禁用(哪些是主键),传播外键是否会成为问题?

replication sql-server-2008 sql-server identity

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

SQL Server 2008:什么是英文分词器?

我正在尝试复制 SQL Server 2008 在生成全文索引时所做的事情,但我很难找到 SQL Server 2008 认为是断字的字符列表。

是否有一个列表指定 SQL Server 2008 将在英文全文索引的哪些字符上断词?

sql-server-2008 full-text-search

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

CREATE INDEX 语句中的列排序顺序?

创建索引时,可以确定索引列是使用升序还是降序进行排序。BOL

[ ASC | DESC ]
Determines the ascending or descending sort direction for the particular index column. The default is ASC.
Run Code Online (Sandbox Code Playgroud)

ASC或之间进行选择的主要原因是什么DESC

index sql-server-2008 sql-server

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

迄今为止,SQL Server 2008 中的 Varchar

varchar在数据库表中有数据,它以DD-MM-YYYY格式存储日期。

我想varcharMM-DD-YYYY格式中选择它。

我正在使用

select convert (varchar(30), (select CONVERT(datetime, '16-11-2011', 103)), 101)
Run Code Online (Sandbox Code Playgroud)

它给 11/16/2011

对此可以进行任何简单的查询吗?

sql-server-2008 date-format

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

如何仅通过命令行将数据库备份和还原到不同的位置和名称

我有一个数据库,我想仅通过命令行将其从一个位置复制到另一个位置(甚至可能复制到另一台计算机)。新位置上的数据库名称不应与原始名称相同。

我尝试了以下命令,但在尝试恢复数据库时失败:

备份:

sqlcmd -E -S MyUser\SQLEXPRESS -Q "BACKUP DATABASE original_db TO DISK='C:\tmp\backups\base_db.bak'"
Run Code Online (Sandbox Code Playgroud)

恢复:

sqlcmd -E -S MyUser\SQLEXPRESS -Q "RESTORE DATABASE new_test_db FROM DISK='C:\tmp\backups\base_db.bak' 
with move 'original_db' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\new_test_db.mdf', 
    move 'original_db' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\new_test_db.ldf'"
Run Code Online (Sandbox Code Playgroud)

当我尝试恢复数据库时,我收到以下错误:“备份集保存了一个数据库的备份,而不是现有的‘new_test_db’数据库。”

(当我的数据库不存在时,我在还原时遇到以下错误 - “逻辑文件 'original_db' 不是数据库 'new_test_db' 的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名。”)

任何想法如何正确地做到这一点?

谢谢您的帮助。

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

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

如何检索/读取存储在数据库中的 SQL 图像数据?

在一个应用程序中,我们以 Image 数据类型将所有图像存储在 SQL 数据库中。从另一个应用程序中,我需要检索图像并将其显示在用户界面上。

我能够存储图像。我无法阅读图像。

如何检索/读取存储在数据库中的 SQL 图像数据?

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

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

更改内核数时出现 SQL Server 2008 错误

我有一台装有 Windows Server 2003 和 SQL Server 2008 的虚拟机(virtualbox),运行 4 个内核。我想使用 6 个内核,但是当我更改机器配置时,由于某种原因 SQL Server 停止工作。我无法启动该服务 - 它给了我一个未处理的异常,没有任何额外的数据。

有谁知道解决方法?我可以使用 4 个内核,但我真的想升级到 6 个。

(我知道是这个设置,因为我一回到 4 核 SQL Server 又开始工作了)

我认为必须有一种无需重新安装即可升级机器的方法。

sql-server-2008 sql-server

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

将 SQL Server 移至新域后,YYYY-MM-DD 已更改为 YYYY-DD-MM 我如何切换回来?

我已经移动了我的 SQL Server 的域,虽然一切主要都在工作,但查询的日期格式似乎已经改变。

所以如果我运行这个:

select convert(datetime,'2012-02-13')
Run Code Online (Sandbox Code Playgroud)

我得到

消息 242,级别 16,状态 3,第 1 行
varchar 数据类型到 datetime 数据类型的转换导致值超出范围。

当我跑

select @@Language, @@Langid
Run Code Online (Sandbox Code Playgroud)

我得到

英国 | 23

我试图设置 sp_defaultlanguage 但这似乎没有区别。

我还检查了控制面板中的区域设置,似乎也设置为英国。

甚至此代码示例也会导致问题:

set language british

select convert(datetime, '2012-02-13')
Run Code Online (Sandbox Code Playgroud)

结果

将语言设置更改为英国。消息 242,级别 16,状态 3,第 3 行 varchar 数据类型到 datetime 数据类型的转换导致值超出范围。

sql-server-2008 date-format

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

在 SQL-Server 2008 中为租户使用视图过滤器

我目前正在 SaaS BI 产品中创建多租户数据架构。

该产品使用共享数据库和共享架构,但具有租户视图过滤器和租户数据加密(此处的灵感来源:http : //msdn.microsoft.com/en-us/library/aa479086.aspx

创建视图过滤器时,我可以执行以下两项操作:

CREATE VIEW TenantEmployees AS
SELECT * FROM Employees WHERE TenantID = SUSER_SID()

CREATE VIEW TenantEmployees AS
SELECT * FROM Employees WHERE TenantID = SUSER_ID()
Run Code Online (Sandbox Code Playgroud)

使用 SID() 我正在使用如下所示的安全标识符:

0x3425F1595A67774ABF485CDC30285443

使用 ID() 我正在使用看起来像这样的普通标识符:

265

哪一个绝对最好用,为什么?:) 我希望两者都是绝对独特的,并且永远不会在新的用户登录中重复使用

sql-server-2008 sql-server view

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

为什么查询会扫描所有分区?

我有以下分区表

create table T (Month char(6), ID int, .... primary key (ID, Month)) on psMonth(Month)
Run Code Online (Sandbox Code Playgroud)

分区函数是

CREATE PARTITION FUNCTION [pfMonth](char(6)) AS 
RANGE RIGHT FOR VALUES (N'200001', .... N'200705', N'200706', N'200707', ....)
Run Code Online (Sandbox Code Playgroud)

但是,以下查询显示的实际分区数是 260 而不是 1?

select count(*)
from T (nolock)
where Month = '200706'
Run Code Online (Sandbox Code Playgroud)

执行计划是

  |--计算标量(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[globalagg1006],0)))
       |--Stream Aggregate(DEFINE:([globalagg1006]=SUM([partialagg1005])))
            |--Parallelism(Gather Streams)
                 |--Stream Aggregate(DEFINE:([partialagg1005]=Count(*)))
                      |--聚簇索引扫描(OBJECT:([DB].[dbo].[T].[PK_T]), WHERE:([DB].[dbo].[T].[Month]=[@1] ))

更新:如果我运行以下查询
,查询运行速度很快,实际分区计数为 1。

select count(*), $partition.pfMonth(Month)
from T with (nolock)
where Month = '200706'
group by $partition.pfMonth(Month)
Run Code Online (Sandbox Code Playgroud)

更新 2:
以下查询也只扫描一个分区。 …

sql-server-2008 sql-server partitioning

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