1

我正在使用一条CASE语句来帮助填充临时表,但由于某种原因,我收到了操作数类型冲突错误:

CREATE TABLE #users 
  ( 
     id       INT IDENTITY (1, 1), 
     userid   UNIQUEIDENTIFIER, 
     username VARCHAR(50),
     sysrole VARCHAR(50) 
  ) 

--Insert all loadtest users into temp table
INSERT INTO #users 
            (userid, 
             username,
             sysrole) 
SELECT id, 
       username,
       sysrole =
       CASE 
            WHEN id between 0 and 100 THEN '63F7971B-45FF-4E3C-86E7-9D0507AF60C0'
            WHEN id between 101 and 200 THEN '26478736-7937-4E52-891B-E80A8D609693'
            WHEN id between 201 and 300 THEN 'CEF5F44F-0961-414C-8578-22BEB0C4B9FF'
            WHEN id between 301 and 400 THEN '63F7971B-45FF-4E3C-86E7-9D0507AF60C0'
            WHEN id between 401 and 500 THEN '7FD13C9E-731B-43AE-95F0-E9AEDC65759C'
        END
FROM   user 
WHERE  username LIKE '%Test%' 

有 500 个用户,所以 CASE 可以处理所有这些可能性。然而,操作数类型冲突正在读取(在 INSERT INTO 开始的行上)uniqueidentifier is incompatible with tinyint

IDENTITY列在 ? 期间没有自动填充INSERT

编辑:我刚刚意识到了解user表格的外观会很有用。它有大约十几列,但我想从中提取的是:

idusername这是一个字符串的主键 (用户的唯一标识符)

sysroleCASE如您所见,正在被定义。

4

3 回答 3

3

如果您只想将五个字符串值任意分配给 500 个用户,每百个用户分配一个,您应该考虑一种不同的方法:

WITH enumerated AS (
  SELECT
    id,
    username,
    rn = ROW_NUMBER() OVER (ORDER BY username)
  FROM user
  WHERE username LIKE '%test%'
)
SELECT
  rn,
  id,
  username,
  sysrole = CASE 
    WHEN rn between 0 and 100 THEN '63F7971B-45FF-4E3C-86E7-9D0507AF60C0'
    WHEN rn between 101 and 200 THEN '26478736-7937-4E52-891B-E80A8D609693'
    WHEN rn between 201 and 300 THEN 'CEF5F44F-0961-414C-8578-22BEB0C4B9FF'
    WHEN rn between 301 and 400 THEN '63F7971B-45FF-4E3C-86E7-9D0507AF60C0'
    WHEN rn between 401 and 500 THEN '7FD13C9E-731B-43AE-95F0-E9AEDC65759C'
  END
FROM enumerated
;

子查询将enumerated行号分配给选定的行,主查询使用这些数字来分配sysrole值。

而且您不需要针对该特定任务的临时表。

于 2013-11-12T21:06:59.743 回答
0

我有模糊的回忆,tinyint 只上升到 127。你可以查一下。解决方案是将数据类型更改为 smallint。

编辑 我查了一下。我有正确的价值,但是对于错误的数据库引擎。解决方案仍然适用。

于 2013-11-12T20:40:06.527 回答
0

tinyint 数据类型的大小只有 1 个字节,并且只能具有 0 到 255 之间的值。IDENTITY 类型应该使用数据类型 INT。

于 2013-11-12T20:41:32.077 回答