sql - 传递变量时用户定义的函数确实有效
问题描述
Camel 标量值函数在使用变量时不起作用
declare @primary_supervisor_name varchar(2000)
declare @lastname varchar(2000)
declare @containComma int
declare @position int
declare @result varchar(200)
DECLARE ts_cursor CURSOR FOR
select primary_supervisor_name from Test
OPEN ts_cursor
FETCH NEXT FROM ts_cursor INTO @primary_supervisor_name
WHILE @@FETCH_STATUS = 0
BEGIN
set @containComma = CHARINDEX(',', @primary_supervisor_name)
Begin
IF (@containComma = 0)
set @position = CHARINDEX(' ' , @primary_supervisor_name)
set @lastName = substring(@primary_supervisor_name, @position + 1, len(@primary_supervisor_name))
set @lastName = LOWER(@lastName)
print dbo.CamelCase('test') -- WORKS and PRINTs "Test"
print dbo.CamelCase(@lastName) -- does not do anything..no seeing any print output in console.
end
FETCH NEXT FROM ts_cursor INTO @primary_supervisor_name
END
CLOSE ts_cursor
DEALLOCATE ts_cursor
骆驼功能不适用于@lastName
. 使用https://www.sqlservercentral.com/scripts/function-returns-string-in-proper-case-camelcase中的 Camel 函数
解决方案
我认为问题可能出在您的程序结构上。你的 BEGIN 和 END 看起来有点奇怪。
WHILE @@FETCH_STATUS = 0
BEGIN
set @containComma = CHARINDEX(',', @primary_supervisor_name)
Begin
...
IF (@containComma = 0)
end
FETCH NEXT FROM ts_cursor INTO @primary_supervisor_name
END
我想你会选择下面的代码块
WHILE @@FETCH_STATUS = 0
BEGIN
set @containComma = CHARINDEX(',', @primary_supervisor_name)
IF (@containComma = 0) BEGIN -- <--- Begin on this line?
...
end
FETCH NEXT FROM ts_cursor INTO @primary_supervisor_name
END
推荐阅读
- autodesk-forge - Autodesk Forge Viewer3D 中的默认模型和测量单位
- flutter - 颤振:如何使 ClipOval 孩子居中
- javascript - Shopify 主题开发 | 从选择列表中选择不同的产品变体时更新价格
- multithreading - 为什么 C++ 线程多次调用析构函数?
- angular - 使用默认值初始化 combineLatest
- sql - 使用带条件的sql查询进行数据合并
- postgresql-10 - 无法使用 timescaledb 扩展 postgresql 数据库
- python - 如何使用 PyGame 淡出和淡出屏幕?
- flutter - 如何暂停相机预览?
- flutter - 小部件在 Android Studio 中不起作用