0

私はこの機能を持っています:

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER FUNCTION [dbo].[SE_VALOR] (@valor int, @verd char(20), @fals char(20))
RETURNS char(20)
AS
BEGIN
DECLARE @resposta char(20)
    ---Check for unit, if meters(MT), convert it to feet(FT)
    IF @valor=1
        BEGIN
            set @resposta = @verd
        END
    ELSE
        BEGIN
            set @resposta =@fals
    END
RETURN( @resposta   )
END

そして、私はこのストアドプロシージャを持っています:

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[SP_pn_FichaTecnica_Motor_Web]
@IDVersao int

AS

DECLARE @Comando nvarchar(4000)
DECLARE @DIESEL varchar(10)
DECLARE @GASOLINA varchar(10)

SET @DIESEL = 'Diesel'
SET @GASOLINA = 'Gasolina'

--

set @Comando = 'SELECT somefield1, somefield2, somefield3,
                dbo.SE_VALOR(TblMotor.TipoInjeccao,@DIESEL,@GASOLINA) AS TipoInjeccao
                FROM sometable
                WHERE IDVersao = @IDVersao'

EXEC sp_executesql @Comando, N'@IDVersao int, @DIESEL varchar(10),@GASOLINA varchar(10)',@IDVersao,@DIESEL,@GASOLINA
print(@Comando)

エラーを出さずに @DIESEL と @GASOLINA を渡すにはどうすればよいですか?

SPを実行しようとすると:

exec SP_pn_FichaTecnica_Motor_Web 27828

私は得る:

メッセージ 102、レベル 15、状態 1、行 32 構文が正しくありません

4

5 に答える 5

1

ご協力ありがとうございます。二重引用符が機能したので、@Naomiに有用な回答を割り当てました。しかし、本当の問題は変数@Comandoのサイズでした。私はそれを次のように定義しました:

DECLARE @Comando nvarchar(4000)

しかし、クエリがこの値を超えていることに気付いたので、次のように変更します。

DECLARE @Comando nvarchar(max)

私の問題を解決しました。

これが他の人々に役立つことを願っています。:)

于 2013-01-15T22:59:08.280 に答える
1

私はあなたの問題を抱えていると思います.定数をパラメータとしてではなく定数として渡したいと思っていました. この場合:

set @Comando = 'SELECT somefield1, somefield2, somefield3,
            dbo.SE_VALOR(TblMotor.TipoInjeccao,''Diesel'',''Gasolina'') AS TipoInjeccao
            FROM sometable
            WHERE IDVersao = @IDVersao'

EXEC sp_executesql @Comando, N'@IDVersao int',@IDVersao

つまり、単一引用符を二重にするだけです。

于 2013-01-15T00:56:01.993 に答える
0

入力パラメータについては、クエリに直接入れることができますが、'文字を。に置き換えてエスケープすることもできます''

SPの出力は、出力パラメーターである必要があります。次に例を示します。

SET @DIESEL = (REPLACE (@DIESEL, '''', ''''''))
SET @GASOLINA = (REPLACE (@GASOLINA, '''', ''''''))
SET @IDVersao = (REPLACE (@IDVersao, '''', ''''''))

set @Comando = 'SELECT @myOutput = 
            dbo.SE_VALOR(TblMotor.TipoInjeccao,'+@DIESEL+','+@GASOLINA+') AS TipoInjeccao
            FROM sometable
            WHERE IDVersao = '+@IDVersao+''

EXEC sp_executesql @Comando, N'@myOutput CHAR(20) OUTPUT', @myOutput OUTPUT
于 2013-01-15T00:50:43.000 に答える
0

発生している正確なエラーは何ですか (完全なエラー)? 一見すると、コードは問題ありません (独自のストアド プロシージャに sp_ プレフィックスを誤って使用する場合を除きます。このプレフィックスはシステム ストアド プロシージャ用に予約されているため、他のもの (_ なしの sp など) を使用するようにしてください)。

于 2013-01-15T00:41:36.467 に答える
0
set @Comando = 'SELECT somefield1, somefield2, somefield3,
                dbo.SE_VALOR(TblMotor.TipoInjeccao,@DIESEL,@GASOLINA) AS TipoInjeccao
                FROM sometable
                WHERE IDVersao = @IDVersao'

に変更します

SET QUOTED_IDENTIFIER OFF
set @Comando = "SELECT somefield1, somefield2, somefield3,
                dbo.SE_VALOR(TblMotor.TipoInjeccao,@DIESEL,@GASOLINA) AS TipoInjeccao
                FROM sometable
                WHERE IDVersao = @IDVersao"
SET QUOTED_IDENTIFIER ON
于 2013-01-15T05:24:29.020 に答える