Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-仅当条件为number时加入_Sql_Sql Server_Join - Fatal编程技术网

SQL Server-仅当条件为number时加入

SQL Server-仅当条件为number时加入,sql,sql-server,join,Sql,Sql Server,Join,我有一张桌子,请员工离开 CREATE TABLE EmployeeLeave ( EmployeeId INT, LeaveType VARCHAR() ); LeaveType可以有数字也可以有字符串 CREATE TABLE MST_LeaveReason ( ReasonId INT, Reason VARCHAR() ); SELECT * FROM EmployeeLeave EL LEFT JOIN MST_LeaveReason LR

我有一张桌子,请员工离开

  CREATE TABLE EmployeeLeave (
  EmployeeId INT,
  LeaveType VARCHAR()
  );
LeaveType可以有数字也可以有字符串

  CREATE TABLE MST_LeaveReason (
  ReasonId INT,
  Reason VARCHAR()
  );

  SELECT * FROM EmployeeLeave EL
  LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType 
上述查询将不起作用,因为LeaveType不总是数字。仅当LeaveType为number时,我才希望此联接有效。我如何实现它。请帮忙

提前感谢。

使用
尝试转换()

您也可以从另一个方向执行此操作:

SELECT *
FROM EmployeeLeave EL LEFT JOIN
     MST_LeaveReason LR
     ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
然后,修复数据模型<代码>连接键应为相同类型。这种转换对性能有很大影响。

使用
try\u convert()

您也可以从另一个方向执行此操作:

SELECT *
FROM EmployeeLeave EL LEFT JOIN
     MST_LeaveReason LR
     ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;

然后,修复数据模型<代码>连接键应为相同类型。这种转换对性能有很大的影响。

如果您的
varchar
的长度只有1,为什么不使用
char(1)
并节省使用“可变”长度的开销?@Larnu:
varchar()
是(幸运的)不合法的语法。在这种情况下,它可能不是
VARCHAR
-的简写形式,它的-no-length-which-implicitly-1。如果
VARCHAR
的长度仅为1,为什么不使用
char(1)
并节省使用“variable”长度的开销呢?@Larnu:
VARCHAR()
是(幸运的?)不合法的语法。在本例中,它可能不是
VARCHAR
-with-no-length-which-is-implicitly-1的缩写。