2013-02-15 57 views
2

我有以下查詢可以正常工作。從WHERE語句中取出幾個'userID並放入變量中

SELECT ui.userID, 
    ui.lockedInd, 
    ui.lockedBy, 
    ui.lockedReason, 
    ui.updatedDtTm, 
    ui.updatedBy, 
    ua.password, 
    ua.updatedDtTm, 
    ua.updatedBy 
FROM userInfo ui 
JOIN userAuthentication ua 
    ON ui.userinfoseqid = ua.userinfoseqid 
WHERE ui.userID IN (
    'userOne', 
    'userTwo' 
) 

我想把用戶名放入頂部聲明的變量中。我有點困惑如何創建變量並添加到它,因爲我總是隻做一個值的變量。 Sudo代碼如下

DECLARE @userIDs 
SET @userIDs = "'userOne', 'userTwo'" 

SELECT ui.userID, 
    ui.lockedInd, 
    ui.lockedBy, 
    ui.lockedReason, 
    ui.updatedDtTm, 
    ui.updatedBy, 
    ua.password, 
    ua.updatedDtTm, 
    ua.updatedBy 
FROM userInfo ui 
JOIN userAuthentication ua 
    ON ui.userinfoseqid = ua.userinfoseqid 
WHERE ui.userID = @userIDs 
+0

背後有什麼創建變量的動機是什麼? – 2013-02-15 21:59:26

+0

這是一部分的.sql文件在兩個select語句和更新語句中使用完全相同的WHERE子句。所以如果一個用戶標識改變了,我不得不改變它的三個位置 – mhopkins321 2013-02-15 22:00:47

回答

2

使用表變量應該適合您。

DECLARE @UserIDS TABLE 
(
    UserId VARCHAR(40) 
) 

INSERT INTO @UserIDS 
(
UserId 
) 
SELECT 'UserOne' 
UNION ALL SELECT 'UserTwo' 
UNION ALL SELECT 'UserThree' 

SELECT ui.userID, 
    ui.lockedInd, 
    ui.lockedBy, 
    ui.lockedReason, 
    ui.updatedDtTm, 
    ui.updatedBy, 
    ua.password, 
    ua.updatedDtTm, 
    ua.updatedBy 
FROM userInfo ui 
JOIN userAuthentication ua 
    ON ui.userinfoseqid = ua.userinfoseqid 
WHERE ui.userID IN @UserIDS