我在T-SQL 用户定义函数中有一个变量@ColumnnName
,它基本上包含列Name。
例如:
declare @ColumnnName= 'firstName'
这意味着我的表中有一个名为firstName
的列,并且此列名存储在名为@ColumnnName
的变量中。
我有这样的查询:
Insert into @Temp([Row], VarLength) select Rowid, LEN(@ColumnnName) from Patients
where
/
*rest of code
*/
在上面的查询中,LEN(@ColumnnName)
将返回9
,这是firstName的长度,但不是firstName列中包含的值。
如何获取包含firstName列的值的长度,而不是字符串firstName本身的长度。
编辑:
完整查询是这样的:
Insert into @Temp([Row], Counts, VarLength) select Rowid, @counter, LEN(@ColumnnName) from Patients where
(case when @ColumnnName = 'firstname' then firstname
when @ColumnnName = 'middlename' then middlename
when @ColumnnName = 'lastname' then lastname
when @ColumnnName = 'State' then [State]
when @ColumnnName = 'City' then City
when @ColumnnName = 'StreetName' then StreetName
when @ColumnnName = 'StreetType' then StreetType end) LIKE SUBSTRING(@parameterFromUser, 1, @counter) + '%'
答案 0 :(得分:5)
这可能是您问题的解决方案:
INSERT INTO @Temp([Row], VarLength)
SELECT Rowid, CASE WHEN @ColumnnName = 'FirstName' THEN LEN(FirstName)
WHEN @ColumnnName = 'LastName' THEN LEN(LastName)
... etc
END AS len
FROM Patients
... etc
如果您想在查询中多次使用上述CASE
表达式,则可以将其包含在CTE
中:
;WITH CTE AS (
SELECT Rowid, CASE WHEN @ColumnnName = 'FirstName' THEN LEN(FirstName)
WHEN @ColumnnName = 'LastName' THEN LEN(LastName)
... etc
END AS len
FROM Patients
)
INSERT INTO @Temp([Row], VarLength)
SELECT Rowid, len
FROM CTE
答案 1 :(得分:-1)
您可以使用EXECUTE命令运行动态SQL。
假设您有一个名为@myvar的字符串var,其名称为列。然后,您可以构建一个完整的SQL语句(类似'select '+@myvar+' from tableName;'
),然后使用EXECUTE命令,就像这个简单的例子一样(您可以从中轻松构建解决方案):
BEGIN
DECLARE @temp NVARCHAR;
SET @temp = 'getdate()';
EXECUTE ('select '+@temp+';');
END;
希望这有帮助。