动态插入并返回@identity值 [英] insert dynamically and return @identity value

查看:98
本文介绍了动态插入并返回@identity值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的所有人,

这是我的编码,它将一些值插入User_log表并返回@identity值。

请帮助我。

感谢adv。

Dear All,
this is my coding which inserts some value into User_log table and returns @identity value .
please help me.
thanks in adv.

Declare @NewDB varchar(max);
SET @NewDB='ta.dbo.user_log ( CLIENT_ID,USER_ID,USER_NAME,LOGIN_TIME)'							
DECLARE @sqlQueryUserLogId nvarchar(MAX),@UserLogId bigint
DECLARE @ParmDefinitionUserLogId nvarchar(500);
SET @sqlQueryUserLogId='insert into  '+ @NewDB+'  values( User_Name=''' + @User_Name + ''' ,User_ID=''' + @User_Id + ''' , Client_Id='''+cast(@Client_Id as varchar(20))+''',LOGIN_TIME=GetDate() )';
SET @ParmDefinitionUserLogId= N'@UserLogId bigint OUTPUT'
EXEC sp_executesql @sqlQueryUserLogId,@ParmDefinitionUserLogId, @UserLogId=@@IDENTITY OUTPUT
			SET @UserLogId=@@IDENTITY;

推荐答案

有一个读到这个,输出值是存储的procudure参数而不是动态查询



使用OUTPUT参数返回数据 [ ^ ]
have a read of this, the output value is a stored procudure argument rather than a dynamic query

Returning Data by Using OUTPUT Parameters[^]


程序

改变程序TestFirst



@UserLogId bigint out)

as

DECLARE @User_Name varchar (50);

DECLARE @User_Id int;

DECLARE @Client_Id int;

DECLARE @NewDB nvarchar(max);

DECLARE @ParmUserLogId nvarchar(500);

set @ User_Name ='mks';

set @ User_Id = 438;

set @ Client_Id = 4

SET @ NewDB ='ta.dbo.user_log(CLIENT_ID,USER_ID,USER_NAME,LOGIN_TIME)'

DECLARE @sqlQueryUserLogId nvarchar( MAX)

SET @ sqlQueryUserLogId ='insert into'+ @ NewDB +'values('+ cast(@Client_Id as varchar(20))+','+ cast(@User_Id as varchar(20) )+','''+ @User_Name +''',GetDate())SET @ UserLogId = SCOPE_IDENTITY()';

SET @ ParmUserLogId = N'@ UserLogId BIGINT OUTPUT'

EXEC sp_executesql @sqlQueryUserLogId,@ ParmUserLogId,@ UserLogId OUTPUT

set @ UserLogId = @ UserLogId;







现在执行




声明@UserLogId bigint;

执行TestFirst



@ UserLogId = @ UserLogId输出



打印'@ UserLogId ='+ cast( @UserLogId as varchar);



成功完全返回UserLogID
Procedure
alter procedure TestFirst
(
@UserLogId bigint out)
as
DECLARE @User_Name varchar(50);
DECLARE @User_Id int;
DECLARE @Client_Id int;
DECLARE @NewDB nvarchar(max);
DECLARE @ParmUserLogId nvarchar(500);
set @User_Name='mks';
set @User_Id=438;
set @Client_Id=4
SET @NewDB='ta.dbo.user_log ( CLIENT_ID,USER_ID,USER_NAME,LOGIN_TIME)'
DECLARE @sqlQueryUserLogId nvarchar(MAX)
SET @sqlQueryUserLogId='insert into '+ @NewDB+' values( '+cast(@Client_Id as varchar(20))+','+cast(@User_Id as varchar(20))+','''+ @User_Name +''', GetDate()) SET @UserLogId=SCOPE_IDENTITY()';
SET @ParmUserLogId= N'@UserLogId BIGINT OUTPUT'
EXEC sp_executesql @sqlQueryUserLogId,@ParmUserLogId, @UserLogId OUTPUT
set @UserLogId=@UserLogId;



Now Execute


declare @UserLogId bigint;
exec TestFirst

@UserLogId=@UserLogId output

print '@UserLogId= '+cast(@UserLogId as varchar);

succefully returns UserLogID


这篇关于动态插入并返回@identity值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆