2016-05-13 13 views
0

アプリケーションを開発することによって。テーブル名(@pxxx)を呼び出す動的ストアドプロシージャが必要です。同じパラメータを渡します。ここには2(datum、por)があります。 tablenameを@pxxx-o.kとして渡しています。また、パラメータdatum、porがタイプ-intまたはvarchar、またはcharまたはその組み合わせである場合。 Int私はCONVERTによってvarcharに変更されます - プロシージャはうまく行きます。さて、C#から電話をかけています。 パラメータ-datumをdatetimeに変更すると問題が発生します。それは動作していません。 varcharに "convert"して日付を変更すると助けになりません。 SQL管理スタジオでは機能しません。私はテーブルのデータム[datetime]に必要なので、問題を解決する必要があります テーブル定義を変更できません。datetimeが必要です。 パラメータと動的SQLストアドプロシージャを渡すことについてのほとんどの質問を探しましたが、解決策が見つかりませんでした。 MS SQL 2005でSQL Serverストアドプロシージャのパラメータ - 異なる種類

表の定義:

CREATE TABLE [dbo].[p001](
    [id] [bigint] IDENTITY(1,1) NOT NULL, 
    [datum] [datetime] NULL, 
    [por] [int] NULL, 
    [cas] [nchar](5) NULL, 
    [max] [int] NULL, 
    [obsad] [int] NULL, 
    [blok] [bit] NULL 
    one of it) ON [PRIMARY] 

私のストアドプロシージャは - まあだけwithous日時パラメータを作業-

ALTER PROCEDURE [dbo].[SPinsertpxx2] (@pxxx nchar(4),@date datetime, @por int) 
AS 
    DECLARE @sqlCommand varchar(500) 
    SET @sqlCommand = 'INSERT INTO '+ @pxxx +' ([datum],[por]) VALUES(' 
    +CONVERT(VARCHAR,@date,112)+','+CONVERT(VARCHAR,@por,5)+')' 
    BEGIN 
    EXEC (@sqlCommand) 
    END 

このストアドプロシージャを動作していない

ALTER PROCEDURE [dbo].[SPinsertpxxx] (@pxxx nchar(4),@cas nvarchar(10), @por int) 
AS 
DECLARE @sqlCommand varchar(500) 
SET @sqlCommand = 'INSERT INTO '+ @pxxx +' ([cas],[por]) VALUES(' 
+CONVERT(VARCHAR,@cas)+','+CONVERT(VARCHAR,@por)+')' 
    BEGIN 
    EXEC (@sqlCommand) 
    END 
+0

英国の言語を114に変更しました。 –

+0

datetimeを文字列から変換すると、msg msg>が失敗しました。 私は、動的SQLでcomandがstring(varchar)でなければならないと読んでいます。したがって、すべてのパラメータはCONVERT(VARCHAR、@パラメータ)によって変換されますが、intは役に立ちましたがdatetimeは役に立ちませんでした。 –

+1

ここではいくつかの問題が発生しています。まず、SQLインジェクションを防ぐために動的SQLをパラメータ化する必要があります。また、varcharに変換していますが、長さを指定していません。私の質問は、なぜあなたはvarcharを渡しているdatetime列に挿入している場合ですか?あなたはまた、 "働かない"を定義する必要があります。どういう意味ですか? –

答えて

0

ここでは、これをparameterzied dynamic sqlを使用して実行する実例を示します。これは、SQLインジェクションを防止し、適切に型付けされたパラメータを使用できるようにします。

create PROCEDURE [dbo].[SPinsertpxx2] 
(
    @pxxx nchar(4) 
    , @datum datetime 
    , @por int 
) AS 
    DECLARE @sqlCommand nvarchar(max) 

    SET @sqlCommand = 'INSERT INTO '+ @pxxx +' ([datum],[por]) VALUES(@datum, @por)' 

    exec sp_executesql @sqlCommand, N'@datum datetime, @por int', @datum = @datum, @por = @por 

これをテストして動作するかどうかを確認します。

exec SPinsertpxx2 'p001', '2016-01-01', 42 

テーブルに正しい値が含まれていますか?

select * from p001 
+0

現在作業中です。再起動後...ありがとうございます。 –

関連する問題