SQL Server output经典使用
OUTPUT子句.在OUTPUT子句中,可以引用特殊表inserted和deleted.使用inserted和deleted表与在触发器中使用的非常相似.
在INSERT,DELETE,UPDATE中OUTPUT的区别
1.对于INSERT,可以引用inserted表以查询新行的属性.
2.对于DELETE,可以引用deleted表以查询旧行的属性.
3.对于UPDATE,使用deleted表查询被更新行在更改前的属性,用inserted表标识被更新行在更改后的值.
输出方式:
1.可以输出给调用方(客户端应用程序)
2.输出给表
3.两者皆可.
应用:
一.带有OUTPUT的INSERT的应用
对于包含自增列的表执行多行insert语句,同时想知道新的标识值时,在INSERT中使用OUTPUT子句非常方便.对于单行INSERT语句,
这不成问题:SCOPE_IDENTITY函数即可实现.
-- Generating Surrogate Keys for Customers
USE tempdb;
GO
IF OBJECT_ID('dbo.CustomersDim') IS NOT NULL
DROP TABLE dbo.CustomersDim;
GO
CREATE TABLE dbo.CustomersDim
(
KeyCol INT NOT NULL IDENTITY PRIMARY KEY,
CustomerID NCHAR(5) NOT NULL,
CompanyName NVARCHAR(40) NOT NULL,
/* ... other columns ... */
);
-- Insert New Customers and Get their Surrogate Keys
DECLARE @NewCusts TABLE
(
CustomerID NCHAR(5) NOT NULL PRIMARY KEY,
KeyCol INT NOT NULL UNIQUE
);
INSERT INTO dbo.CustomersDim(CustomerID, CompanyName)
OUTPUT inserted.CustomerID, inserted.KeyCol
INTO @NewCusts
-- OUTPUT inserted.CustomerID, inserted.KeyCol
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Country = N'UK';
SELECT CustomerID, KeyCol FROM @NewCusts;
GO
注意代码中被注释掉的第二个OUTPUT子句,后面没有INTO子句.如果还要输出返回给调用方,取消注释即可.这样,
INSERT语句将包含两个OUTPUT子句.
示例2.
USE AdventureWorks;
GO
CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
DECLARE @TmpTable TABLE (ID INT, TEXTVal VARCHAR(100))
INSERT TestTable (ID, TEXTVal)
OUTPUT Inserted.ID, Inserted.TEXTVal INTO @TmpTable
VALUES (1,'FirstVal')
INSERT TestTable (ID, TEXTVal)
OUTPUT Inserted.ID, Inserted.TEXTVal INTO @TmpTable
VALUES (2,'SecondVal')
SELECT * FROM @TmpTable
SELECT * FROM TestTable
DROP TABLE TestTable
GO
USE AdventureWorks;
GO
CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
INSERT TestTable (ID, TEXTVal)
OUTPUT Inserted.ID, Inserted.TEXTVal
VALUES (1,'FirstVal')
INSERT TestTable (ID, TEXTVal)
OUTPUT Inserted.ID, Inserted.TEXTVal
VALUES (2,'SecondVal')
DROP TABLE TestTable
GO
二.带有OUTPUT的DELETE的应用.
如果要删除数据的同时,还需要记录日志,或者归档数据.在DELETE中使用OUTPUT子句在适合不过了.
USE AdventureWorks;
GO
CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
DECLARE @TmpTable TABLE (ID INT, TEXTVal VARCHAR(100))
INSERT TestTable (ID, TEXTVal)
VALUES (1,'FirstVal')
INSERT TestTable (ID, TEXTVal)
VALUES (2,'SecondVal')
DELETE
FROM TestTable
OUTPUT Deleted.ID, Deleted.TEXTVal INTO @TmpTable
WHERE ID IN (1,2)
SELECT * FROM @TmpTable
SELECT * FROM TestTable
DROP TABLE TestTable
GO
三.带有OUTPUT的UPDATE的应用
USE AdventureWorks;
GO
CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
DECLARE @TmpTable TABLE (ID_New INT, TEXTVal_New VARCHAR(100),ID_Old INT, TEXTVal_Old VARCHAR(100))
INSERT TestTable (ID, TEXTVal)
VALUES (1,'FirstVal')
INSERT TestTable (ID, TEXTVal)
VALUES (2,'SecondVal')
UPDATE TestTable
SET TEXTVal = 'NewValue'
OUTPUT Inserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTVal INTO @TmpTable
WHERE ID IN (1,2)
SELECT * FROM @TmpTable
SELECT * FROM TestTable
DROP TABLE TestTable
GO
ALTER procedure [dbo].[sp_I_InterfaceJobEvent]
@JobServer varchar(30) =NULL,
@JobType varchar(30)= NULL,
@JobStartTime datetime= NULL,
@JobEndTime datetime= NULL,
@SW1_FileType varchar(10)= NULL,
@SW2_SystemDate varchar(10)= NULL,
@SW3_GenDate varchar(10)= NULL,
@SW4_Email varchar(2)= NULL,
@JobStatus varchar(20) =NULL,
@JobMessage varchar(1000)= NULL,
@JobReturnCode char(2)= NULL,
@FileSearchPattern varchar(50)= NULL,
@FileListMatched varchar(5000)= NULL,
@SourceApplication varchar(3)= NULL,
@OptionalQualifier varchar(30)= NULL,
@SystemDate varchar(10)= NULL,
@LockBy varchar(30)= NULL,
@LockDate datetime= NULL,
@LockWorkstation varchar(30)=null
as
begin Insert into InterfaceJobEvent
(
[JobServer],
[JobType],
[JobStartTime],
[JobEndTime],
[SW1_FileType],
[SW2_SystemDate],
[SW3_GenDate],
[SW4_Email],
[JobStatus],
[JobMessage],
[JobReturnCode],
[FileSearchPattern],
[FileListMatched],
[SourceApplication],
[OptionalQualifier],
[SystemDate],
[LockBy],
[LockDate],
[LockWorkstation]
)
output inserted.JobID
values (
isnull(@JobServer,''),
isnull(@JobType,''),
isnull(@JobStartTime,GETDATE()),
@JobEndTime,
isnull(@SW1_FileType,''),
@SW2_SystemDate,
@SW3_GenDate,
isnull(@SW4_Email,''),
isnull(@JobStatus,''),
isnull(@JobMessage,''),
isnull(@JobReturnCode,''),
isnull(@FileSearchPattern,''),
isnull(@FileListMatched,''),
isnull(@SourceApplication,''),
isnull(@OptionalQualifier,''),
isnull(@SystemDate,''),
isnull(@LockBy,''),
@LockDate,
isnull(@LockWorkstation,'')
) --if @@rowcount > 0
--begin
-- return @@rowcount
--end
--else
-- return 0
--end end
Dim int_Jobid As Int64
Try
With adtInterfaceJobEvent.InsertCommand .Parameters("@SW1_FileType").Value = SW1_FileType
.Parameters("@SW2_SystemDate").Value = SW2_SystemDate
.Parameters("@SW3_GenDate").Value = SW3_GenDate
.Parameters("@SW4_Email").Value = SW4_Email
.Parameters("@FileSearchPattern").Value = FileSearchPattern
.Parameters("@FileListMatched").Value = FileListMatched
.Parameters("@SourceApplication").Value = SourceApplication
.Parameters("@OptionalQualifier").Value = OptionalQualifier
.Parameters("@SystemDate").Value = SystemDate
.Parameters("@JobServer").Value = Environment.MachineName
.Parameters("@JobStartTime").Value = DateTime.Now
.Parameters("@JobType").Value = JobType
.Parameters("@JobStatus").Value = JobStatus End With If SqlConnection_DISDB.State = ConnectionState.Closed Then
SqlConnection_DISDB.Open()
End If int_Jobid = adtInterfaceJobEvent.InsertCommand.ExecuteScalar()
SQL Server output经典使用的更多相关文章
- SQL Server output子句用法 output inserted.id 获取刚插入数据的id
--插入数据,并返回刚刚插入的数据id INSERT INTO [soloreztest] ([name]) output inserted.id VALUES ('solorez') --执行结果: ...
- sql server output用法说明
带有output的insert语句. @@identity只能返回当前会话最后生产的标识列. 如果一次性插入多条语句的话. 需要返回这些自动生产的标识列. 那么outpu就派上用场了. declar ...
- SQL Server 2005 盛宴系列 经典教程
SQL Server 2005 盛宴系列 经典教程 [复制链接] 发表于 2007-3-27 14:08 | 来自 51CTO网页 [只看他] 楼主 TECHNET SQL serve ...
- Microsoft SQL Server Trace Flags
Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...
- 回首经典的SQL Server 2005
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com SQL Server是我使用时间最长的数据库,算起来已经有10年了.上世纪90年代,微软在软件开发的所有领域高歌猛 ...
- SQL Server存储过程Return、output参数及使用技巧
SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...
- SQL Server 编程入门经典(3)之T-SQL基本语句
本章内容简介: 如何从数据库检索数据(SELECT) 如何向表中插入数据(INSERT) 如何适当更新数据(UPDATE) 如何删除表中数据(DELETE) 3.1 基本SELECT语句 如果你在此 ...
- SQL server经典电子书、工具和视频教程汇总
SQL server经典电子书.工具和视频教程汇总 SQL server经典电子书.工具和视频教程汇总 SQL Server是高校计算机专业的一门必修课程,同时众多企业采用SQL Server作为数据 ...
- qt调用sql server存储过程并获取output参数
最近新做的一个项目需要使用qt5连接另一台机器上的sql server,虽然网上已有类似文章,但还是有些其中很少提及的问题,故在这里汇总下: qt连接sql server可以参考这篇文章: <Q ...
随机推荐
- POJ 2031 Building a Space Station
3维空间中的最小生成树....好久没碰关于图的东西了..... Building a Space Station Time Limit: 1000MS Memory Li ...
- js跳转页面
<script type="text/javascript"> 方法一: location.href = 'http://www.baidu.com'; 方法二: l ...
- mysql explain 中key_len的计算
今天丁原问我mysql执行计划中的key_len是怎么计算得到的,当时还没有注意,在高性能的那本书讲到过这个值的计算,但是自己看执行计划的时候一直都没有太在意这个值,更不用说深讨这个值的计算了: ke ...
- Android学习笔记函数
//调用新的Activity Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent ...
- CSS使用自定义光标样式-遁地龙卷风
测试环境是chrome浏览器 Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357. ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之三
五.睡眠和唤醒一个线程 有时,你会想要在一段特定的时间后再去中断线程的运行.举个例子,程序中的一个线程每一分钟检查一次传感器的状态,剩余的时间,线程应该处于空闲的状态.在这段空闲时间里,线程不会使用计 ...
- MetadataType来帮助entity framework自动生成的代码进行标注
真的是,用的时候就四处google,还是记在这里容易找 [MetadataType(typeof(Person.Metadata))] public partial class Person { pr ...
- [hihoCoder#1065]全图传送
[hihoCoder#1065]全图传送 试题描述 先知法里奥是 Dota 系列中的一个英雄.机动性强,推塔能力一流,打钱速度快,传送技能使先知可以全地图支援.在后期比拼中通过强大的兵线控制能力使得对 ...
- 160809209_李梦鑫_C语言程序设计实验2 选择结构程序设计
实验2-1 输入3个数,并按由大到小的顺序输出. 实验要求: 编写一个C程序,输入3个数,并按由大到小的顺序输出. 源码:#include <stdio.h> int main() { i ...
- 剑指Offer 树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分为2个部分.1先找出A中和B根节点相同的节点r. 2,咱判断B中所有孩子节点是不 ...