SQL 中变量值的 LEN

LEN of value in the variable in TSQL

我在 T-SQL user defined function 中有一个变量 @ColumnnName,它基本上包含列名称。

例如:

declare @ColumnnName= 'firstName'

这意味着我的 table 中有一个名称为 firstName 的列,并将此列名称存储在名为 @ColumnnName.

的变量中

我有这样的查询:

Insert into @Temp([Row], VarLength) select  Rowid, LEN(@ColumnnName) from Patients
 where 
/ 
*rest of code 
*/

在上面的查询中,LEN(@ColumnnName) 将 return 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) + '%'

这可能是您问题的解决方案:

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

您可以使用 EXECUTE 命令 运行 动态 SQL。 假设您有一个字符串变量,名为 @myvar,其中包含一列的名称。然后您可以构建一个完整的 SQL 语句(类似于 'select '+@myvar+' from tableName;'),然后使用 EXECUTE 命令,就像这个简单的示例(您可以从中轻松构建您的解决方案):

BEGIN
  DECLARE @temp NVARCHAR;
  SET @temp = 'getdate()';
  EXECUTE ('select '+@temp+';');
END;

希望对您有所帮助。