Sql server 存储过程-变量声明和类型错误

Sql server 存储过程-变量声明和类型错误,sql-server,stored-procedures,Sql Server,Stored Procedures,此存储过程正在运行,但会引发错误 必须声明标量变量@responders\u count 您正在尝试将浮点值值连接到字符串 改变 CREATE PROCEDURE AP_ModelingDataset_Creation1 @Product varchar(max), @Segment varchar(max) as Begin Declare @query2 nvarchar(max) Declare @Responders_Count_query nvarchar(max)

此存储过程正在运行,但会引发错误

必须声明标量变量@responders\u count


您正在尝试将
浮点值
值连接到字符串

改变

CREATE PROCEDURE AP_ModelingDataset_Creation1
    @Product varchar(max),
    @Segment varchar(max)
as
Begin
Declare @query2 nvarchar(max)

Declare @Responders_Count_query nvarchar(max)
Declare @NonResponders_Count_query nvarchar(max)
Declare @Percentage_query nvarchar(max)
Declare @Responders_Count int
Declare @NonResponders_Count int
Declare @Percentage float


--Oversampling:
set @Responders_Count_query = N'select @Responders_Count=count(*) from AP_'+replace(@Product,' ','_')+'_'+@Segment+'_ModelingDataset_Total where Flag=1'
set @NonResponders_Count_Query = N'select @NonResponders_Count = count(*) from AP_'+replace(@Product,' ','_')+'_'+@Segment+'_ModelingDataset_Total where Flag=0'
set @Percentage_Query = N'select @Percentage = ((@Responders_Count)*(10.0))/(@NonResponders_Count)'

set @query2 =
'SELECT s.*
into AP_'+replace(@Product,' ','_')+'_'+@Segment+'_ModelingDataset
FROM
(
SELECT *
from AP_'+replace(@Product,' ','_')+'_'+@Segment+'_ModelingDataset_Total
where Flag=1
UNION
SELECT *
FROM AP_'+replace(@Product,' ','_')+'_'+@Segment+'_ModelingDataset_Total
WHERE Flag=0 AND 
(SELECT '+@Percentage+') >= CAST(CHECKSUM(NEWID(), [MSSalesTPID]) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
)s' 

EXEC sp_executesql @Responders_Count_query, N'@Responders_Count int OUTPUT', @Responders_Count OUTPUT;
EXEC sp_executesql @NonResponders_Count_query, N'@NonResponders_Count int OUTPUT', @NonResponders_Count OUTPUT;
EXEC sp_executesql @Percentage_query, N'@Percentage float OUTPUT', @Percentage OUTPUT;
exec(@query2)

END
GO


非常感谢。我纠正了那个错误。。但它仍然显示了一个错误“必须声明标量变量@responders\u count”,为什么在已经声明变量时会发生这种情况?
(SELECT '+@Percentage+') >= CAST(CHECKSUM(NEWID(), [MSSalesTPID]) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
)s' 
(SELECT '+convert(varchar,@Percentage)+') >= CAST(CHECKSUM(NEWID(), [MSSalesTPID]) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
)s'