我在我的SQL Server中有兩個表使用SQL子查詢或動態查詢更新配置表中的一個表列值
表沒有。 1
CREATE TABLE #Config
(
varColumnName VARCHAR(200) ,
varAliasName VARCHAR(200)
)
INSERT INTO #Config (varColumnName, varAliasName)
VALUES ('Consumed (Strips)', 'decQuantity'),
('Closing (Strips)', 'decClosing')
表沒有。 2
CREATE TABLE #Data
(
decQuantity DECIMAL(18, 2) ,
decClosing DECIMAL(18, 2) ,
varInvalidRemarks VARCHAR(MAX)
)
INSERT INTO #Data (decQuantity, decClosing)
VALUES (10.10, 25.00),
(-15.10, 45.00),
(5.10, -10.00),
(-25.10, -10.00)
從這兩個表我想更新#Data
表的varInvalidRemarks
列和我想要的follwing輸出:
decQuantity | decClosing | varInvalidRemarks
-------------|------------|--------------------------
10.10 | 25.00 |
-15.10 | 45.00 | Consumed (Strips) can NOT be negetive
5.10 | -10.00 | Closing (Strips) can NOT be negetive
-25.10 | -10.00 | Consumed (Strips) can not be negetive,Closing(Strips) can not be negetive
我做這件事情有FAST FORWARD READ ONLY
光標,但我想這樣做子查詢或動態查詢。
DECLARE @varColumnName VARCHAR(200) ,
@varAliasName VARCHAR(200)
DECLARE DisplayColumn CURSOR FAST_FORWARD READ_ONLY
FOR
SELECT C.varColumnName ,
C.varAliasName
FROM #Config AS C
OPEN DisplayColumn
FETCH NEXT FROM DisplayColumn INTO @varColumnName, @varAliasName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('
UPDATE D
SET D.varInvalidRemarks = isnull(D.varInvalidRemarks,'''') +
'','[email protected] +' can not be negative ''
FROM #Data AS D
WHERE CAST(ISNULL(D.'[email protected]+', 0) AS DECIMAL(18, 2)) < 0
')
FETCH NEXT FROM DisplayColumn INTO @varColumnName, @varAliasName
END
CLOSE DisplayColumn
DEALLOCATE DisplayColumn
我想這樣做,因爲我的存儲過程中的性能問題。
是否有可能通過子查詢來實現這件事?
感謝
向我們顯示您的光標查詢。 – pedram
爲什麼不用'CASE'表達式來做呢? –
'SELECT \t decQuantity, \t decClosing, \t varInvalidremarks = STUFF(( \t \t SELECT \t \t \t CASE WHEN decQuantity <0 THEN '消耗(條)不能爲負' ELSE '' END + \t \t \t CASE WHEN decClosing <0 THEN '關閉(條)不能爲負' ELSE '' END \t \t),1,1, '') FROM #DATA ' –