Sql 在merge语句中为变量设置一个值
感谢NLwino提出此问题: 我希望从合并中返回新计数器的值:Sql 在merge语句中为变量设置一个值,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,感谢NLwino提出此问题: 我希望从合并中返回新计数器的值: DECLARE @CounterType VARCHAR(50) SET @CounterType = 'Case'; MERGE [dbo].[AN_Counter] WITH(ROWLOCK) TARGET USING(SELECT @CounterType) SOURCE([KEY]) ON TARGET.[System_Name] = SO
DECLARE @CounterType VARCHAR(50)
SET @CounterType = 'Case';
MERGE [dbo].[AN_Counter] WITH(ROWLOCK) TARGET
USING(SELECT @CounterType) SOURCE([KEY])
ON TARGET.[System_Name] = SOURCE.[KEY]
WHEN MATCHED THEN
UPDATE
SET COUNTER_ = COALESCE(COUNTER_,0) + 1
SELECT @CounterType = COALESCE(Prefix,'') + CAST(SUBSTRING('0000000000000000000000000000',1,padding - LEN(CAST (Counter_ AS VARCHAR ))) + CAST (Counter_ AS VARCHAR ) AS VARCHAR)
;
我希望执行合并,并将新值放入@CounterType变量中,如上所述
非常感谢您的帮助。
M我成功完成了,我想在这里分享我是如何做到的:
SELECT * FROM [dbo].[AN_Counter] WHERE System_Name = 'Case'
DECLARE @CounterType VARCHAR(50)
SET @CounterType = 'Case'
DECLARE @RADHE TABLE (
[Counter_] [int] NULL,
[Prefix] [varchar](10) NULL,
[Padding] [int] NULL
)
BEGIN TRANSACTION TR_ORDER_NUMBERS
INSERT INTO @RADHE(
[Counter_]
,[Prefix]
,[Padding]
)
SELECT
[Counter_]
,[Prefix]
,[Padding]
FROM
(
MERGE [dbo].[AN_Counter] WITH(ROWLOCK) TARGET
USING(SELECT @CounterType) SOURCE([KEY])
ON TARGET.[System_Name] = SOURCE.[KEY]
WHEN MATCHED THEN
UPDATE
SET COUNTER_ = COALESCE(COUNTER_,0) + 1
OUTPUT $Action AS The_Action
,INSERTED.Counter_
,INSERTED.Prefix
,INSERTED.Padding
) Outputs
WHERE The_Action = 'UPDATE';
SELECT * FROM [dbo].[AN_Counter]
WHERE System_Name = 'Case'
SELECT * FROM @RADHE
SELECT COALESCE(R.Prefix,'') + CAST(SUBSTRING('0000000000000000000000000000',1,R.Padding - LEN(CAST (R.Counter_ AS VARCHAR ))) + CAST (R.Counter_ AS VARCHAR ) AS VARCHAR)
FROM @RADHE R
SELECT XACT_STATE()