2011-05-23 12 views
9

के कारण मैं एक उपयोगकर्ता-निर्धारित तालिका tvpInsertedColumns कहा जाता है प्रकार है:उपयोगकर्ता निर्धारित तालिका प्रकार प्रविष्टि कभी कभी रूपांतरण त्रुटि

CREATE TYPE [Audit].[tvpInsertedColumns] AS TABLE(
    [ColumnName] [varchar](max) NOT NULL, 
    [NewValue] [varchar](max) NULL 
) 

एक संग्रहीत प्रक्रिया में मैं इस (दोनों @Name और क्या करने की कोशिश कर रहा हूँ @ फोन कर रहे हैं VARCHARs):

:

DECLARE @AuditColumns Audit.tvpInsertedColumns 
INSERT INTO @AuditColumns (ColumnName,NewValue) 
    SELECT 'Name',@Name UNION ALL 
    SELECT 'Phone',@Phone 

इस त्रुटि के साथ विफल

बहरहाल, एक अन्य संग्रहित प्रक्रिया में मैं इस (@ AddressLine1 और @ AddressLine1 VARCHARs कर रहे हैं) कर रहा हूँ:

DECLARE @AuditColumns AS Audit.tvpInsertedColumns 
INSERT INTO @AuditColumns (ColumnName,NewValue) 
    SELECT 'AddressLine1',@AddressLine1 UNION ALL 
    SELECT 'AddressLine2',@AddressLine2 

और सब कुछ ठीक काम करता है।

दोनों संग्रहीत प्रक्रियाएं केवल एक साधारण डालने कर रही हैं और फिर एक अन्य संग्रहीत प्रक्रिया के साथ प्रकार का उपयोग करने की कोशिश कर रही हैं जो यूडीटी को पैरामीटर के रूप में लेती है।

यह यूडीटी के साथ मेरा पहला वास्तविक अनुभव है, इसलिए मुझे आशा है कि मुझे कुछ स्पष्ट याद आ रही है, लेकिन इससे मुझे कोई समझ नहीं आती है। अगर आपको और जानकारी चाहिए तो मुझे बताएं।

उत्तर

10
DECLARE @AuditColumns Audit.tvpInsertedColumns 
INSERT INTO @AuditColumns (ColumnName,NewValue) 
SELECT 'Name',@Name UNION ALL 
SELECT 'Phone',@Phone 

मैं UDTs बारे में ज्यादा पता नहीं है, लेकिन क्या मुझे लगता है कि क्या हो रहा है यह है कि, एक बिंदु पर, या तो @name या @phone मूल्यों प्रकार पूर्णांक के हैं।

कोशिश कास्ट करने के लिए @Name और @ फोन हालात

INSERT INTO @AuditColumns (ColumnName,NewValue) 
SELECT 'Name', cast(@Name as varchar) UNION ALL 
SELECT 'Phone', cast(@Phone as varchar) 
+1

+1 और FYI करें VARCHAR लिए, यह एक UDT त्रुटि लेकिन संघ में डेटाप्रकार पूर्वता नहीं है सभी से पहले सम्मिलित – gbn

+0

होता है यह बहुत सही नहीं था , लेकिन यह मुझे समाधान के लिए मिला (और यह सब मैं चाहता था)। '@ नाम' और '@ फोन' चर कभी भी प्रकार नहीं बदले, समस्या यह थी कि किसी बिंदु पर (मेरे नमूना कटऑफ के बाद) मैं एक पूर्णांक भी डाल रहा था कि यह एक स्वचालित रूपांतरण होगा। सभी गैर 'वर्चर' प्रकारों को 'वचरर (MAX)' में डालकर इस मुद्दे को ठीक किया गया। मुझे संदेह है कि जीबीएन सही है कि इसका यूडीटी के साथ कुछ लेना देना नहीं है बल्कि 'यूनियन' बयानों में डेटाटाइप प्राथमिकता के साथ। आप दोनों का आपकी सहायता के लिए धन्यवाद। – theChrisKent

संबंधित मुद्दे