我大约有10个变量,在我的select语句中都需要填充这些变量。
这全部由语言代码驱动,如果“英语”将所有变量设置为英语,否则设置为母语。
我遇到的问题是很多重复代码,我想知道在CASE中填充多个变量的最佳方法是什么。
我当前的代码
DECLARE
@x nvarchar(200),
@y nvarchar(200),
@z nvarchar(200)
SELECT
@x = CASE WHEN @language like '%english%'
THEN
T.washroom_English
ELSE
T.washroom
END,
@y = CASE WHEN @language like '%english%'
THEN
T.bed_English
ELSE
T.bed
END,
@z = CASE WHEN @language like '%english%'
THEN
T.kitchen_English
ELSE
T.kithen
END
FROM house as T
答案 0 :(得分:1)
您可以使用一个查询,该查询将根据您的@language变量按语言(英语或英语)生成行。
UNION ALL
结果将具有与上方查询相同的列名。
然后,您可以从子查询中为变量分配一个静态列名称。
SELECT @x = washroom
, @y = bed
, @z = kitchen
FROM ( SELECT T.washroom
, T.bed
, T.kitchen
FROM house AS T
WHERE @language NOT LIKE '%english%'
UNION ALL
SELECT T.washroom_English
, T.bed_English
, T.kitchen_English
FROM house AS T
WHERE @language LIKE '%english%'
) data
答案 1 :(得分:0)
Try my little trick
DECLARE @English NVARCHAR(10) = '_English'
DECLARE @Fields NVARCHAR(500) = 'washroom,bed,kithen,'
DECLARE @TableName NVARCHAR(50) = 'house'
DECLARE @ColumnValue NVARCHAR(100)
DECLARE @Index INT
DECLARE @SelectString NVARCHAR(4000) = 'SELECT '
WHILE CHARINDEX(',', @Fields) > 0
BEGIN
SELECT @Index = CHARINDEX(',', @Fields)
SELECT @ColumnValue = SUBSTRING(@Fields, 1, @Index-1)
SET @SelectString = @SelectString + '''' + @ColumnValue + @English +'''As ' + @ColumnValue + ', '
SELECT @Fields = SUBSTRING(@Fields, @Index + 1, LEN(@Fields) - @Index)
END
SELECT @SelectString = SUBSTRING(@SelectString,0, LEN(@SelectString)) + ' From ' + @TableName
SELECT @SelectString
EXEc sp_sqlexec @SelectString
答案 2 :(得分:0)
不知道我是否正确理解了你,但我的主张是:
DECLARE
@x nvarchar(200),
@y nvarchar(200),
@z nvarchar(200)
IF @language like '%english%'
SELECT @x = T.washroom_English, @y = T.bed_English, @z = T.kitchen_English FROM house as T
ELSE
SELECT @x = T.washroom, @y = T.bed, @z = T.kitchen FROM house as T