我已经设法编写了我的存储过程,它现在正在运行但没有检索到结果。
CREATE PROCEDURE [dbo].[SigleEnseigne]
AS
BEGIN
DECLARE @Sigle VARCHAR(150),
@Enseigne VARCHAR(150),
@SigleEnseigne1 VARCHAR(150)
SELECT @Sigle = ISNULL(John_Jack.Sigle, '') ,
@Enseigne = ISNULL(John_Jack.Enseigne, '') ,
@SigleEnseigne1 = CASE WHEN Code_Juridique LIKE 'M%'
THEN ' / '
+ ISNULL(John_Jack.Enseigne, '')
WHEN ISNULL(John_Jack.Sigle, '') = ''
AND ISNULL(John_Jack.Enseigne, '') = ''
THEN ''
ELSE @Sigle + ' / ' + @Enseigne
END
FROM John_Jack
SELECT @Sigle, @Enseigne, @SigleEnseigne1
END
然而,当我正在运行SELECT * FROM John_Jack
时,我确实有结果。
我做错了什么?
我一直误解了什么吗?
我已经在网上查了一下,但没有任何相关内容突出。
答案 0 :(得分:2)
您的选择中似乎缺少某些条件:
SELECT @Sigle = ...
FROM John_Jack
因此,当它在John_Jack
表中的记录多于一个时,您的变量赋值将无法按预期工作:您不能将表中的多个值放入变量。
你要么在where
子句中写一些过滤条件,要么(如果你不关心你从表中得到什么值)只需要使用像
SELECT TOP 1
@Sigle = ...
FROM John_Jack
或者,如果您需要根据您的逻辑(正如您在评论中所述)“重新格式化”检索整个表格数据 - 那么只需删除这些变量并重写您的过程
CREATE PROCEDURE [dbo].[SigleEnseigne]
AS
BEGIN
SELECT
ISNULL(John_Jack.Sigle, '') as Sigle,
ISNULL(John_Jack.Enseigne, '') as Enseigne,
CASE WHEN Code_Juridique LIKE 'M%'
THEN ' / '
+ ISNULL(John_Jack.Enseigne, '')
WHEN ISNULL(John_Jack.Sigle, '') = ''
AND ISNULL(John_Jack.Enseigne, '') = ''
THEN ''
ELSE ISNULL(John_Jack.Sigle, '')
+ ' / ' + ISNULL(John_Jack.Enseigne, '')
END as SigleEnseigne1
FROM John_Jack
END