选择函数中计算的星期几定义的列名

时间:2016-02-24 11:32:09

标签: sql-server tsql

我有以下代码,它在存储过程中很有用。

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      ║
╚════════════╩════════╩═════════╩═══════════╩══════════╩════════╝

谢谢, 瑞奇

1 个答案:

答案 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将作为自动验证,查询只返回一行。