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;
希望对您有所帮助。
我在 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;
希望对您有所帮助。