【问题标题】:User Defined Assignment用户定义的分配
【发布时间】:2014-03-11 21:54:11
【问题描述】:

我正在处理一项构建用户定义函数的任务。当我运行这个选择语句时

SELECT * 
FROM DPSupervisorLookup('112233')

它给了我这个错误

消息 8152,级别 16,状态 14,第 1 行字符串或二进制数据将是 被截断。

我知道这个特定的员工 ID 不在数据库中,但是当我运行它时,我仍然遇到同样的错误。这是我的代码,以防万一我在某个地方出错。

Create Function DPSupervisorLookUp (@EmployeeID int)
Returns @Supervisors Table
(SupervisorEmployeeID Int,
SupervisorLastName Varchar(20),
SupervisorFirstName Varchar (20), 
SupervisorJobTitle Varchar(20))

As
begin
insert @Supervisors
select Distinct E2.EmployeeID as SupervisorEmployeeID, e2.LastName as     SupervisorLastName, E2.Firstname as SupervidorFirstName, E2.JobTitle as SupervisorJobTitle
from Employee e1
left outer join Employee e2 on e1.Supervisor = e2.EmployeeID

Return 
end

【问题讨论】:

  • 显示Employee 表定义。还有为什么你将 int 作为 varchar 传递,你在哪里使用它?
  • 两个问题。 1.为什么你传入EmployeeID而不使用它? 2. 为什么要给函数传入一个字符串值?
  • 感谢大家的帮助!

标签: mysql sql sql-server tsql


【解决方案1】:

LastNameFirstnameJobTitle 之一的长度可能超过 20 个字符。参考Employee表方案,创建大小合适的@Supervisors表字段。

【讨论】:

    【解决方案2】:

    @Supervisors 的列大小应该等于 Employee 表

    例如 如果 Employee.LastName 的大小是 50,那么 @Supervisors.SupervisorLastName 的大小也应该是 50

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2016-12-04
      • 2016-05-08
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多