我有以下代码,它在存储过程中很有用。
SET @SQL = 'SELECT @Hours = ' + datename(dw,@DateFor) + ' FROM tblHours WHERE EmployeeID = ' + CAST(@EmployeeID AS VarChar(10))
SET @Parm = '@Hours int output'
EXEC sp_executesql @SQL, @Parm, @Hours OUT
但我需要在函数中执行此操作,因此我无法使用EXEC。
任何人都可以帮我更改我的选择而不需要EXEC吗?
tblHours ╔════════════╦════════╦═════════╦═══════════╦══════════╦════════╗ ║ EmployeeID ║ Monday ║ Tuesday ║ Wednesday ║ Thursday ║ Friday ║ ╠════════════╬════════╬═════════╬═══════════╬══════════╬════════╣ ║ 1 ║ 8 ║ 8.5 ║ 8.5 ║ 8.5 ║ 8.5 ║ ║ 2 ║ 8 ║ 9 ║ 9 ║ 9 ║ 9 ║ ║ 3 ║ 8 ║ 0 ║ 0 ║ 8 ║ 8 ║ ╚════════════╩════════╩═════════╩═══════════╩══════════╩════════╝
谢谢, 瑞奇
答案 0 :(得分:0)
没有动态sql:
set @Hours =
(
SELECT
case datename(dw,@DateFor)
when 'Monday' then h.Monday
...
when 'Sunday' then h.Sunday
end
FROM tblHours h
WHERE h.EmployeeID = @EmployeeID
)
set
将作为自动验证,查询只返回一行。