Sql server SQL Server:使用TSQL变量时出错
我有一个用户函数,它返回一个名为dbo.IsPartReady的位。 我正在尝试使用触发器内部的函数,如下所示:Sql server SQL Server:使用TSQL变量时出错,sql-server,tsql,sql-server-2008,triggers,Sql Server,Tsql,Sql Server 2008,Triggers,我有一个用户函数,它返回一个名为dbo.IsPartReady的位。 我正在尝试使用触发器内部的函数,如下所示: SET @railReady = dbo.IsPartReady(1,@curPartiId); SET @frameReady = dbo.IsPartReady(2,@curPartiId); SET @dryAReady = dbo.IsPartReady(3,@curPartiId); SET @dryBReady = dbo.IsPartReady(4,@curPartiI
SET @railReady = dbo.IsPartReady(1,@curPartiId);
SET @frameReady = dbo.IsPartReady(2,@curPartiId);
SET @dryAReady = dbo.IsPartReady(3,@curPartiId);
SET @dryBReady = dbo.IsPartReady(4,@curPartiId);
IF ( (@railReady AND @frameReady ) OR ( @dryAReady AND @dryBReady ) )
我在IF语句中遇到以下错误:
在预期条件的上下文中指定的非布尔型表达式,靠近“AND”
我做错了什么?SQL Server中的位数据类型不是布尔值,而是整数。您必须将变量的值与某个值进行比较,才能得到布尔表达式。位的值可以是0、1或NULL。
SQL Server中的位数据类型不是布尔值,而是整数。您必须将变量的值与某个值进行比较,才能得到布尔表达式。位的值可以是0、1或NULL。 使用以下命令:
IF ((@railReady = 1 AND @frameReady = 1) OR (@dryAReady = 1 AND @dryBReady = 1))
或者
IF ((@railReady & @frameReady) | (@dryAReady & @dryBReady)) = 1
更多信息:
为了验证这一点,我们可以使用包含四位值的所有组合的真值表:
输出:
a b c d Logic Bitwise
----- ----- ----- ----- ----- -------
0 0 0 0 N N
0 1 0 0 N N
0 0 1 0 N N
0 1 1 0 N N
1 0 0 0 N N
1 1 0 0 Y Y
1 0 1 0 N N
1 1 1 0 Y Y
0 0 0 1 N N
0 1 0 1 N N
0 0 1 1 Y Y
0 1 1 1 Y Y
1 0 0 1 N N
1 1 0 1 Y Y
1 0 1 1 Y Y
1 1 1 1 Y Y
(16 row(s) affected)
使用以下命令:
IF ((@railReady = 1 AND @frameReady = 1) OR (@dryAReady = 1 AND @dryBReady = 1))
或者
IF ((@railReady & @frameReady) | (@dryAReady & @dryBReady)) = 1
更多信息:
为了验证这一点,我们可以使用包含四位值的所有组合的真值表:
输出:
a b c d Logic Bitwise
----- ----- ----- ----- ----- -------
0 0 0 0 N N
0 1 0 0 N N
0 0 1 0 N N
0 1 1 0 N N
1 0 0 0 N N
1 1 0 0 Y Y
1 0 1 0 N N
1 1 1 0 Y Y
0 0 0 1 N N
0 1 0 1 N N
0 0 1 1 Y Y
0 1 1 1 Y Y
1 0 0 1 N N
1 1 0 1 Y Y
1 0 1 1 Y Y
1 1 1 1 Y Y
(16 row(s) affected)
局部变量是以哪种方式声明的?请显示代码,除非@curpartid设置在while循环抖动或游标循环双重抖动中,否则很可能您的触发器也会因多行操作而中断。同意Damien+1,但没有太大差异,因此不确定为什么会有不同的抖动。while循环只是一个没有声明游标的游标。用哪种方式声明局部变量?请显示代码,除非@curpartid设置在while循环抖动或游标循环双重抖动中,否则很可能您的触发器也会因多行操作而中断。同意Damien+1,但没有太大差异,因此不确定为什么会有不同的抖动。while循环只是一个没有声明游标的游标。对于第一个示例,我强烈建议在组合AND和OR时始终使用括号。对于第二个问题,我不确定这是什么语言,但我肯定无法在t-SQL中得到任何类似的工作。您能发布您尝试过的实际工作代码行吗?2005年对我来说非常有吸引力,有趣+1对于您的第一个示例,我强烈建议在组合AND和OR时始终使用括号。对于第二个问题,我不确定这是什么语言,但我肯定无法在t-SQL中得到任何类似的工作。你能发布一行你尝试过的实际工作代码吗?在2005年对我来说非常有吸引力,有趣+1