Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 在第一次选择中分配的变量不会在第二次选择中检索_Sql Server - Fatal编程技术网

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限制为只返回一行,变量将填充您想要的内容。