0
我有一个表ABSENCE,其中有40个员工ID,需要从表变量中添加两列作为参考表。对于每个emp id,我需要从表变量中随机分配值。下面是我尝试没有随机代码:将随机文本插入参考表变量的列中
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(已被填充),并因为它不能为空,所以插入失败。
另外,如何随机化REARRAY表变量中的值以将它们插入到ABSENCE表中?
'SELECT DISTINCT @@ ROWCOUNT'?你觉得这意味着什么?是否有意'更新''ABSENCE'中的行来填充两个新列的值? “INSERT”需要为所有列提供值,无论是显式还是隐式:标识列,可空列和默认值。 – HABO
希望通过@@ rowcount和loop获取行数。感谢您对关于插入的澄清。 – skrubber
['@@ ROWCOUNT'](https://msdn.microsoft.com/en-us/library/ms187316.aspx?f=255&MSPPError=-2147217396)返回前一条语句影响的行数。应用'DISTINCT'和使用'FROM'子句是令人困惑的。你已经写了一些东西,比如'声明@Pi作为Float =(从Information_Schema.Table_Constraints中选择top 1 3.1415927,其中42不是NULL);',尽管如果表没有行的话会失败。 – HABO