首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在引用表变量的列中插入随机文本

在引用表变量的列中插入随机文本
EN

Stack Overflow用户
提问于 2015-04-21 04:18:14
回答 1查看 312关注 0票数 0

我有一个有40个员工I的表,需要从一个表变量中添加两列,该变量充当一个引用表。对于每个emp id,我需要从表变量中随机赋值。以下是我在没有随机化的情况下尝试的代码:

代码语言:javascript
复制
USE TSQL2012;
GO
DECLARE @MAX SMALLINT;
DECLARE @MIN SMALLINT;
DECLARE @RECODE SMALLINT;
DECLARE @RE CHAR(100);

DECLARE @rearray table (recode smallint,re char(100));
insert into @rearray values (100,'HIT BY BEER TRUCK')
,(200,'BAD HAIR DAY')
,(300,'ASPIRIN OVERDOSE')
,(400,'MAKEUP DISASTER')
,(500,'GOT LOCKED IN THE SALOON')

DECLARE @REFCURSOR AS CURSOR;
SET @REFCURSOR = CURSOR FOR  
SELECT RECODE,RE FROM @REARRAY; 
OPEN @REFCURSOR; 

SET @MAX = (SELECT DISTINCT @@ROWCOUNT FROM ABSENCE); 
SET @MIN = 0; 
ALTER TABLE ABSENCE ADD CODE SMALLINT, REASONING CHAR(100);

WHILE (@MIN <= @MAX)
BEGIN
        FETCH NEXT FROM @REFCURSOR INTO @RECODE,@RE; 
        INSERT INTO ABSENCE (CODE, REASONING) VALUES (@RECODE,@RE);
        SET @MIN+=1;
END
CLOSE @REFCURSOR
DEALLOCATE @REFCURSOR 

SELECT EMPID,CODE,REASONING FROM ABSENCE 

虽然我只插入了两列,但它试图插入到empid (已被填充)中,并且由于它不能为NULL,所以插入失败。

另外,如何将REARRAY表变量中的值随机化,以将它们插入到缺勤表中?

EN

回答 1

Stack Overflow用户

发布于 2015-04-21 04:26:31

由于这是一个很小的数据集,因此一种方法可能是将CROSS APPLYSELECT TOP(1) ... FROM @rearray ORDER BY NEWID()方法一起使用。这实际上是在UPDATE语句中连接ABSENCE表和引用表,每次连接时都会随机选择一行。总而言之,它看起来像是:

代码语言:javascript
复制
UPDATE ABSENCE
SET col1 = x1.recode, col2 = x2.recode
FROM ABSENCE a
    CROSS APPLY (SELECT TOP(1) * FROM @rearray ORDER BY NEWID()) x1(recode, re)
    CROSS APPLY (SELECT TOP(1) * FROM @rearray ORDER BY NEWID()) x2(recode, re)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29757583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档