2017-05-05 25 views
1

私はテーブルがあり、特定のアクションを実行するためにストアドプロシージャの1つの内部にテーブル値paramを渡すことを念頭に置いています。基本的なテーブル構造は以下の通りです。SQL文字列またはバイナリデータが切り捨てられます。テーブルタイプパラメータに挿入中

CREATE TABLE [dbo].[CitytTax] (
    [CountryCode] [int] NOT NULL, 
    [TaxType] [varchar](255) NULL 
) 

ご覧のとおり、Taxtype列はvarchar型で最大255文字です。しかし、アプリケーションコードの一部に以下のようなテーブル型を作成し、このテーブル型をparamとしてspのいずれかに渡します。

DECLARE @TaxDetails as [CitytTax] 

ここでは、いくつかのダミー値を挿入し、このテーブルタイプをSPのいずれかに渡します。

INSERT INTO @TaxDetails ([CountryCode],TaxType) 
VALUES (6047,'Codfggtuioanoio charge to fund the liquidation of insurancevalues') 

が、以下のようにエラーを取得:

文字列またはバイナリデータは、ここで問題は、テーブルの値のタイプは、実際のデータベースのテーブルに類似しているカラムを有するされ

を切り捨てされます。だから私はスクリプトの上に挿入すると、それは失敗します。しかし、50文字未満の[taxtype]に値を挿入すると、正常に挿入されます。 50文字以上は使用できません。 IMはなぜそれが失敗するのだろうかと不思議に思って、それは最大255文字を取ることになっていますか?

+0

あなたは 'CREATE TYPE [dbo]。[CitytTax] AS TABLE'を持っていますか?それは何ですか? –

+0

あなたはそれが唯一の値であることを確信していますか? –

+0

私はSQL Serverとのリーグ外ですが、これはASCII/Unicodeなどの問題に関連する可能性があります。ユニコードに切り替え( 'nvarchar'を使用)、DBスキーマ/照合をチェックしてください。申し訳ありませんが、参考にしてください。 http://stackoverflow.com/questions/144283/what-is-the-difference-between-varchar-and-nvarchar –

答えて

0

データ長が実際にフィールド長より短い場合。次に、メインテーブルのトリガーでいっぱいになっている別のテーブルを持つことになります。そこでは、列のサイズも変更する必要があります。

また、挿入物のすべての一重引用符を二重引用符で囲むように置き換えて、ストアドプロシージャに渡します。

+0

これはANSI_WARNIGS OFFで機能しました。私はSPの一部を与えていましたが、完全ではありません。他の場合もここで参照できます:https://raresql.com/2014/01/03/sql-server-a-quick-solution-to -string-or-binary-data-be-be-truncated-using-stored-procedure/ – maheshkumarbm

0

まあ、私は簡単な修正である何かを考え出し:ちょうどINSERTクエリの前に行下に追加:

のSET ANSI_WARNINGSをOFF。

+1

これは修正ではありません。それはあなたの耳の中にあなたの指をくっつけて、「ラ・ラ・ラ・ラ・ビー・ナント・ユー・ユー・ユー」と叫んでいます。切り詰めはまだ**起こります**、あなたはちょうどその喜んでその事実を無視しています。 –

+0

それは働いています。私はSPの一部を与えていましたが、完全ではありません。他の場合もここで参照できます:https:// raresql。com/2014/01/03/sql-server-a-quick-solution-to-string-or-binary-data-as-be-be-be-be-stored-procedure/ – maheshkumarbm

+0

IMのやり直し、ちょっとした修正私は見つけました......私はこれを最終的なものとして受け入れませんでした。 – maheshkumarbm

関連する問題