2017-05-05 52 views
1

我有一個場景,有一個表,我想傳遞表中的值參數存儲過程之一,以形成某些行動。基本的表結構如下。SQL字符串或二進制數據將被截斷。同時插入到表類型參數

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

正如您所見,Taxtype列是varchar類型,最多需要255個字符。不過,我將在應用程序代碼的一部分中創建如下的表類型,並將此表類型作爲參數傳遞給sp之一。

DECLARE @TaxDetails as [CitytTax] 

現在我將插入一些虛擬值並將此表類型傳遞給其中一個SP。

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

但得到誤差如下:

字符串或二進制數據將被截斷

這裏的問題是表值類型是一個具有塔,它類似於實際的數據庫表。所以當我插入上面的腳本時,它失敗了。但是,如果我插入任何值[taxtype]少於50個字符,它會插入成功。但超過50個字符失敗。 IM疑惑爲什麼它失敗了,它應該佔用255個字符?

+0

你有CREATE TYPE [dbo]。[CitytTax] AS TABLE嗎?它是什麼? –

+0

你確定這些是唯一被插入的值嗎? –

+0

我已經離開了我的聯盟,但是這可能與ASCII/Unicode等問題有關。切換到unicode(使用'nvarchar')並檢查你的數據庫模式/排序規則。對不起,如果沒有幫助,但另請參閱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-will-be-truncated-using-stored-procedure/ – maheshkumarbm

0

好吧,我想通了,應該說這是速戰速決:剛纔添加以下行插入查詢之前:

SET ANSI_WARNINGS OFF。

+1

這不是一個修復。那就是將你的手指伸入你的耳朵,並喊着「LA LA LA我聽不到你」。截斷仍然會發生**,你現在只是「高興地」忽略這個事實。 –

+0

它已經工作。我給了一塊SP,但沒有完成......你可以在這裏參考其他的例子:https:// raresql。com/2014/01/03/sql-server-a-quick-solution-to-string-or-binary-data-will-be-truncated-using-stored-procedure/ – maheshkumarbm

+0

IM再次告訴,它只是一個快速修復我發現......即使我明白,接受這是最終的修正。 – maheshkumarbm

相關問題