我有以下存储过程
CREATE PROCEDURE SigleEnseigne
@Sigle VARCHAR OUTPUT,
@Enseigne VARCHAR OUTPUT,
@SigleEnseigne1 VARCHAR(150) OUTPUT
AS
BEGIN
SELECT ISNULL(John_Jack.Sigle,'')
INTO Sigle
FROM John_Jack
SELECT ISNULL(John_Jack.Enseigne,'')
INTO Enseigne
FROM John_Jack
SELECT
CASE
WHEN Code_Juridique LIKE 'M%' THEN ' / ' + @Enseigne INTO @SigleEnseigne1
WHEN @Sigle = '' AND @Enseigne = '' THEN '' INTO @SigleEnseigne1
ELSE @Sigle + ' / ' + @Enseigne INTO @SigleEnseigne1
END
FROM John_Jack
END
GO
我在创建sp
时遇到了这个错误代码Msg 156,Niveau 15,État1,ProcédureSigleEnseigne,Ligne 29
Syntaxe incorrecte vers le motclé'INTO'。
SQL Server不喜欢这一行
WHEN Code_Juridique LIKE 'M%' THEN ' / ' + @Enseigne INTO @SigleEnseigne1
有人能给我一些关于我做错了什么的见解吗?我是SQL Server的新手,我的脚本可能不尊重T-SQL标准。如果是的话,请赐教。
由于
答案 0 :(得分:1)
应该是这样的 -
SELECT @Sigle = ISNULL(John_Jack.Sigle,'')
FROM John_Jack;
SELECT @Enseigne = ISNULL(John_Jack.Enseigne,'')
FROM John_Jack;
SELECT @SigleEnseigne1 = CASE
WHEN Code_Juridique LIKE 'M%' THEN ' / ' + @Enseigne
WHEN @Sigle = '' AND @Enseigne = '' THEN ''
ELSE @Sigle + ' / ' + @Enseigne
END
FROM John_Jack
定义输出变量@SigleEnseigne1 VARCHAR(150) OUTPUT
时。
答案 1 :(得分:1)
应该更像是
WHEN something THEN SET @yourVariableField = whatever
如果您要将数据插入表或表变量
,INTO语句就更多了答案 2 :(得分:1)
这里有几个问题:
1. Give your types a length
2. Incorrect syntax like `INTO @SigleEnseigne1`
3. You can do this in one go
以下是更正的查询:
CREATE PROCEDURE SigleEnseigne
@Sigle VARCHAR(150) OUTPUT ,
@Enseigne VARCHAR(150) OUTPUT ,
@SigleEnseigne1 VARCHAR(150) OUTPUT
AS
BEGIN
SELECT TOP 1
@Sigle = ISNULL(Sigle, '') ,
@Enseigne = ISNULL(Enseigne, '') ,
@SigleEnseigne1 = CASE WHEN Code_Juridique LIKE 'M%'
THEN ' / ' + ISNULL(Enseigne, '')
WHEN ISNULL(Sigle, '') = ''
AND ISNULL(Enseigne, '') = ''
THEN ''
ELSE Sigle + ' / ' Enseigne
END
FROM John_Jack
END
GO
但是如果John_Jack
表有多行,那么这个查询没有任何意义。在这种情况下,您可能需要在查询中添加一些WHERE
子句以获取所需的行。