小编Gre*_*g B的帖子

为什么`SELECT @@IDENTITY` 返回一个小数?

我正在使用Dapper对来自 ASP.NET MVC 3 (.NET 4.0) 应用程序的 SQL Server 2008 R2 Express 实例执行以下查询。

INSERT INTO Customers (
         Type, Name, Address, ContactName, 
         ContactNumber, ContactEmail, Supplier)
VALUES (
         @Type, @Name, @Address, @ContactName, 
         @ContactNumber, @ContactEmail, @Supplier)

SELECT @@IDENTITY
Run Code Online (Sandbox Code Playgroud)

对 的调用connection.Query<int>(sql, ...)正在引发无效的强制转换异常。我已经调试了它,它是在 Dapper 调用GetValue返回的SqlDataReader.

的返回类型GetValueObject,在调试器中检查它显示它是一个装箱十进制。

如果我将选择更改为SELECT CAST(@@IDENTITY as int),则 GetValue 的返回是一个装箱的 int 并且不会引发异常。

Id 列绝对是 int 类型;为什么会SELECT @@IDENTITY返回一个小数?

一些附加信息:

  • 数据库是全新的。
  • 客户表是我添加到其中的唯一对象。数据库中没有其他(用户)表、视图、触发器或存储过程。
  • 数据库中有 10 行,Id 为 1,2,3,4,5,6,7,8,9,10(即该列不超出 int …

sql-server ado.net t-sql

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

SQL Server 备份策略的优缺点及其适当的使用场景

据我所知,有三种可能的方式来备份您的 SQL Server 数据库

  1. 完整备份
  2. 差异备份
  3. 日志传送

每种策略的优缺点是什么,应该在什么情况下使用?

sql-server backup

10
推荐指数
2
解决办法
6580
查看次数

如何恢复多个备份

我正在使用ExpressMaint和 Windows 计划任务来创建一些 MS SQL Server 2008 R2 Express 数据库的每周完整和每日差异备份

每周满额

expressmaint -S (local)\SQLExpress -D ALL -T DB -R D:\Backup\Reports -RU WEEKS -RV 1 -B D:\Backup\Data -BU WEEKS -BV 4 -V -C
Run Code Online (Sandbox Code Playgroud)

每日差异

expressmain -S (local)\SQLExpress -D ALL -T DIF -R D:\Backup\Reports -RU WEEKS -RV 1 -B D:\Backup\Data -BU days -BV 7 -V -C
Run Code Online (Sandbox Code Playgroud)

当我将这些恢复到某个点时,我必须单独恢复每个备份。有没有什么办法可以连锁的一系列备份到一个单独的恢复将重新发挥正确的顺序?

当我尝试这个时,我收到错误

执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)


附加信息:

加载在“C:\Foo\Bar_FullBackup_20110130_2346.bak”上的媒体被格式化为支持 1 个媒体系列,但根据备份设备规范预计有 2 个媒体系列。RESTORE HEADERONLY 异常终止。(Microsoft SQL Server,错误:3231)

如需帮助,请单击:http : //go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600&EvtSrc=MSSQLServer&EvtID=3231&LinkId=20476

编辑

当您右键单击数据库时,我正在使用任务菜单中的还原对话框。从那里,我选择“从设备恢复”并添加我希望从中恢复的 .bak …

sql-server-2008 sql-server backup restore

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

如何根据表中的另一列创建不同的顺序值集?

我有一张桌子,里面放着两种类型的笔记。提货单和交货单。它们是相同的数据结构,因此使用相同的表。

CREATE TABLE Notes (
   Id int IDENTITY(1,1) NOT NULL,
   Type int  NOT NULL,
   CustomerId int NOT NULL,
   -- etc
)
Run Code Online (Sandbox Code Playgroud)

我正在将数据从旧系统迁移到此表中,并且要求收款和交付票据具有自己的序列号。

我之前已经实现了两个序列表

CREATE TABLE CollectionNoteSequence (
    Id int IDENTITY(1,1) NOT NULL,
    NoteId int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

其中该Id列是收藏笔记的唯一顺序 ID,然后是 NoteId 外键的 to Notes.Id

现在是进行最终(真实)数据迁移的时候了,而且这种设置似乎很难使用。

有没有办法可以将两个序列表合并并NoteNo在 Notes 表中添加一个字段,以便NoteNo根据Note.Type? 这是复合键还是什么?

新表可能看起来像

CREATE TABLE Notes (
   Id int IDENTITY(1,1) NOT NULL,
   NoteNo int NOT NULL,
   Type int  NOT NULL,
   CustomerId int NOT NULL,
   -- …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 t-sql

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

标签 统计

sql-server ×3

backup ×2

sql-server-2008 ×2

t-sql ×2

ado.net ×1

restore ×1