Sql server 在第一次选择中分配的变量不会在第二次选择中检索
执行以下语句时,将为Sql server 在第一次选择中分配的变量不会在第二次选择中检索,sql-server,Sql Server,执行以下语句时,将为Start\u Index和End\u Index返回非null/null值的组合: SELECT CHARINDEX('_', dbo.Components.Cast, 1) AS Start_Index, CHARINDEX('_', dbo.Components.Cast, CHARINDEX('_', dbo.Components.Cast, 1) + 1) AS End_Index FROM dbo.Components 由于我希望同时执行赋值
Start\u Index
和End\u Index
返回非null/null值的组合:
SELECT
CHARINDEX('_', dbo.Components.Cast, 1) AS Start_Index,
CHARINDEX('_', dbo.Components.Cast, CHARINDEX('_', dbo.Components.Cast, 1) + 1) AS End_Index
FROM dbo.Components
由于我希望同时执行赋值和数据检索,我将SELECT
语句分为两部分。但是,Start\u Index
和End\u Index
现在为所有行返回NULL
:
DECLARE @start_index INT
DECLARE @end_index INT
SELECT
@start_index = CHARINDEX('_', dbo.Components.Cast, 1),
@end_index = CHARINDEX('_', dbo.Components.Cast, CHARINDEX('_', dbo.Components.Cast, 1) + 1)
FROM dbo.Components
SELECT
@start_index AS Start_Index,
@end_index AS End_Index
FROM dbo.Components
我做错了什么?
@start\u index
和@end\u index
不属于dbo。组件
。从第二个SELECT
语句中的中删除。它们是否为每一行返回非空值?你有标量变量。如果您写入SELECT@sv=something
,并且结果集包含多行,则无法很好地定义哪个值将是分配给变量的最后一个值。@ZoharPeled从dbo中删除第二个。components
并执行返回一行NULL
值。@Damien\u the\u不信者否,我应该说——我更新了问题。大多数值都是由偶尔出现的NULL
填充的。请记住,一个变量只能包含一个值,因此如果Components表有多个记录,那么这些变量将包含表中的一个值,而您不知道是哪一个。将select限制为只返回一行,变量将填充您想要的内容。