相关疑难解决方法(0)

不显示列名称

我有一个StudentMarks带有列的表Name, Maths, Science, English.数据就像

Name,  Maths, Science, English  
Tilak, 90,    40,      60  
Raj,   30,    20,      10
Run Code Online (Sandbox Code Playgroud)

我希望得到如下安排:

Name,  Subject,  Marks
Tilak, Maths,    90
Tilak, Science,  40
Tilak, English,  60
Run Code Online (Sandbox Code Playgroud)

使用unpivot,我可以正确获取Name,Marks,但无法将源表中的列名称获取到Subject所需结果集中的列.

我怎样才能做到这一点?

我到目前为止已达到以下查询(获取名称,标记)

select Name, Marks from studentmarks
Unpivot
(
  Marks for details in (Maths, Science, English)

) as UnPvt
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server unpivot sql-server-2008

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

在SQL Server中创建审计触发器

我需要在SQL Server 2005数据库中的两个表上实现更改跟踪.我需要审核添加,删除,更新(详细了解更新内容).我正计划使用触发器来执行此操作,但在Google上进行搜索后,我发现错误地执行此操作非常容易,而且我想在开始时避免使用它.

任何人都可以发布更新触发器的示例,以优雅的方式成功完成此操作吗?我希望最终得到一个具有以下结构的审计表:

  • ID
  • LOGDATE
  • 表名
  • TransactionType(更新/插入/删除)
  • 的recordId
  • 字段名
  • 的OldValue
  • 的NewValue

......但我愿意接受建议.

谢谢!

sql-server audit triggers sql-server-2005

30
推荐指数
3
解决办法
8万
查看次数

如何确定更新触发器中的更新字段

更新:使用Update_Columns()不是这个问题的答案,因为字段可能会按触发器的顺序更改(Update_Columns取决于列顺序).

更新2:我已经知道Deleted和Inserted表保存了数据.问题是如何确定已更改的内容而无需对字段名称进行硬编码,因为字段名称可能会更改,或者可能会添加字段.

可以说我有一个有三个字段的表.

该行已存在,现在用户更新字段1和2.

如何在更新触发器中确定更新字段的内容以及前后值的位置?

我想将这些记录到日志表中.如果有两个字段更新,则应在历史记录表中生成两行.

Table
Id  intField1  charField2  dateField3
7           3  Fred        1995-03-05

Updated To

7           3  Freddy      1995-05-06

History Table
_____________

Id  IdOfRowThatWasUpdated    BeforeValue    AfterValue (as string)
1                       7    Fred           Freddy
2                       7    1995-03-05     1995-05-06
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Deleted表来获取旧值,并使用inserted表来获取新值.然而,问题是如何动态地这样做.换句话说,实际的表有50列,我不想将50个字段硬编码到SQL语句中,如果字段发生变化,也不想担心保持SQL同步表格变化.

格雷格

sql sql-server sql-server-2008-r2

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