2009-07-20 28 views
31

एसक्यूएल सर्वर में, मैं एक से दूसरे टेबल से मूल्यों को सम्मिलित करने के लिए कोशिश कर रहा हूँ तालिका परिभाषा से मेल नहीं खाता नीचे दिए गए क्वेरी का उपयोग करके:स्तंभ का नाम या आपूर्ति किए गए मान की संख्या

delete from tblTable1 

insert into tblTable1 select * from tblTable1_Link 

मैं निम्न त्रुटि हो रही है:

कृपया मदद:

Column name or number of supplied values does not match table definition. 

मुझे यकीन है कि दोनों तालिका में समान संरचना, स्तंभ नाम और एक ही डेटा प्रकार हो रहा है!

+1

एक और संभावना यह है कि पर डीबी मिलान अपने टीईएमपी डीबी और डीबी जो आप सम्मिलित कर रहे हैं, मेल नहीं खाते हैं। –

उत्तर

26

वे एक ही संरचना की जरूरत नहीं है ... मैं गारंटी ले सकते हैं कि वे अलग

मैं जानता हूँ कि आप पहले से ही यह बना लिया है रहे हैं ... There is already an object named ‘tbltable1’ in the database

यह क्या आप चाहते हो सकता है (जो भी अपने अन्य मुद्दा) समाधान:

Drop table tblTable1 

select * into tblTable1 from tblTable1_Link 
14

आवेषण के लिए यह हमेशा बेहतर है निर्दिष्ट करने के लिए स्तंभ नाम निम्न देखें

DECLARE @Table TABLE(
     Val1 VARCHAR(MAX) 
) 

INSERT INTO @Table SELECT '1' 

ठीक काम करता है,

DECLARE @Table TABLE(
     Val1 VARCHAR(MAX), 
     Val2 VARCHAR(MAX) 
) 

INSERT INTO @Table (Val1) SELECT '1' 

काम करता है के लिए त्रुटि

DECLARE @Table TABLE(
     Val1 VARCHAR(MAX), 
     Val2 VARCHAR(MAX) 
) 

INSERT INTO @Table SELECT '1' 

Msg 213, Level 16, State 1, Line 6 Insert Error: Column name or number of supplied values does not match table definition.

का कारण बनता है तालिका डीईएफ़ करने के लिए बदल रहा है लेकिन इसके बाद के संस्करण बदलते। आप संरचनाओं की आपूर्ति अधिक विशिष्ट कॉलम के साथ निर्दिष्ट

होने की जरूरत है और हम एक बार देख

0

स्तंभ उपसर्ग एक तालिका नाम या उपनाम क्वेरी में उपयोग नाम के साथ मेल नहीं खाता हो सकता है।

मैं भी इस त्रुटि

हल करने के लिए एनडब्ल्यू मैंने पाया काम कर रहा था कि ऐसा क्यों आ रहा है बस क्वेरी

में छोटे परिवर्तन

http://sqlerrormessages.blogspot.com/2009/08/sql-server-error-messages-msg-107.html

2

गिराने तालिका मेरे लिए एक विकल्प नहीं था बनाने के लिए की जरूरत है, चूंकि मैं एक रनिंग लॉग रख रहा हूं। अगर हर बार मुझे डालने की ज़रूरत होती है तो मुझे छोड़ना पड़ता था, टेबल बेकार होगा।

मेरी त्रुटि इसलिए थी क्योंकि मेरे पास तालिका तालिका विवरण में कुछ कॉलम थे जो अन्य कॉलम के उत्पाद थे, इन समस्याओं को मेरी समस्या को बदलते थे। जैसे

create table foo (
field1 as int 
,field2 as int 
,field12 as field1 + field2) 

create table copyOfFoo (
field1 as int 
,field2 as int 
,field12 as field1 + field2) --this is the problem, should just be 'as int' 

insert into copyOfFoo 
SELECT * FROM foo 
10

यह एक पुराना पोस्ट है, लेकिन मैं चाहता हूँ करने के लिए भी है कि यदि आप

insert into blah 
     select * from blah2 

और blah और blah2 की तरह कुछ है मन में समान रखें कि इसके एक गणना स्तंभ यह एक ही त्रुटि फेंक देंगे उल्लेख ...

मैं सिर्फ महसूस किया कि जब ऊपर में विफल रहा है और मैं

insert into blah (cola, colb, colc) 
     select cola, colb, colc from blah2 

की कोशिश की मेरी उदाहरण में यह पूरा नाम क्षेत्र (प्रथम और अंतिम से गणना की, आदि)

1

गणना कॉलम समस्या बना था। SELECT * का उपयोग न करें। गणना किए गए फ़ील्ड को छोड़कर आपको प्रत्येक फ़ील्ड को निर्दिष्ट करना होगा

0

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

इसमें एक लिंक किया गया सर्वर बनाना और गतिशील एसक्यूएल का उपयोग करना शामिल है - सर्वश्रेष्ठ नहीं, लेकिन अगर कोई बेहतर कुछ सुझाव दे सकता है, तो कृपया टिप्पणी/उत्तर दें।

declare @sql nvarchar(max) 


DECLARE @DB_SPACE TABLE (
[DatabaseName] NVARCHAR(128) NOT NULL, 
[FILEID] [smallint] NOT NULL, 
[FILE_SIZE_MB] INT NOT NULL DEFAULT (0), 
[SPACE_USED_MB] INT NULL DEFAULT (0), 
[FREE_SPACE_MB] INT NULL DEFAULT (0), 
[LOGICALNAME] SYSNAME NOT NULL, 
[DRIVE] NCHAR(1) NOT NULL, 
[FILENAME] NVARCHAR(260) NOT NULL, 
[FILE_TYPE] NVARCHAR(260) NOT NULL, 
[THE_AUTOGROWTH_IN_KB] INT NOT NULL DEFAULT(0) 
,filegroup VARCHAR(128) 
,maxsize VARCHAR(25) 

PRIMARY KEY CLUSTERED ([DatabaseName] ,[FILEID]) 
) 


SELECT @SQL ='SELECT [DatabaseName], 
     [FILEID], 
     [FILE_SIZE_MB], 
     [SPACE_USED_MB], 
     [FREE_SPACE_MB], 
     [LOGICALNAME], 
     [DRIVE], 
     [FILENAME], 
     [FILE_TYPE], 
     [THE_AUTOGROWTH_IN_KB] 
     ,filegroup 
     ,maxsize FROM OPENQUERY('+ QUOTENAME('THE_MONITOR') + ','''+ ' EXEC MASTER.DBO.monitoring_database_details ' +''')' 
exec sp_executesql @sql 


     INSERT INTO @DB_SPACE(
          [DatabaseName], 
          [FILEID], 
          [FILE_SIZE_MB], 
          [SPACE_USED_MB], 
          [FREE_SPACE_MB], 
          [LOGICALNAME], 
          [DRIVE], 
          [FILENAME], 
          [FILE_TYPE], 
          THE_AUTOGROWTH_IN_KB, 
          [filegroup], 
          maxsize 
         ) 

     EXEC SP_EXECUTESQL @SQL 

यह मेरे लिए अभी काम कर रहा है। मैं संग्रहीत प्रक्रिया द्वारा लौटाए गए कॉलम की संख्या और कॉलम के प्रकार की गारंटी दे सकता हूं, इस तालिका में जैसा ही है, क्योंकि मैं संग्रहीत प्रक्रिया से उसी तालिका को वापस करता हूं।

धन्यवाद और का संबंध मार्सेलो

8

समस्या यह है कि यदि आप स्तंभों का उपयोग किए बिना डेटाबेस में डेटा सम्मिलित करने के लिए कोशिश कर रहे हैं। एसक्यूएल सर्वर आपको त्रुटि संदेश देता है।

त्रुटि: insert into users values('1', '2','3') - यह ठीक रूप में लंबे समय से काम करता है आप केवल 3 कॉलम

अगर आप 4 स्तंभ लेकिन उनमें से 3

सही में सम्मिलित करना चाहते हैं: insert into users (firstName,lastName,city) values ('Tom', 'Jones', 'Miami')

आशा है कि यह मदद करता है

0

मेरे लिए अपराधी पूर्णांक Emp में वेतन

सम्मिलित करने के लिए सौंपा मूल्य है loyees (आईडी, प्रथम नाम, अंतिम नाम, लिंग, वेतन) मान (3, 'कनाडा', 'पा', 'मी', 15,000)

वेतन कॉलम में जब हम आवंटित 15,000 संकलक समझ में 15 और 000

यह सुधार मेरे लिए ठीक काम करता है। कर्मचारी (आईडी, प्रथम नाम, अंतिम नाम, लिंग, वेतन) मूल्यों में सम्मिलित (4, 'अमेरिका', 'सैम', 'मी', 15000)

0

अपने आईडी देखें यह पहचान है, अगर यह तो सुनिश्चित करें कि है वहाँ आईडी नहीं अशक्त पहचान (1,1) है और अपनी मेज, ड्रॉप तालिका और फिर बनाने तालिका बनाने .. 2 के बाद दिन पहले मैं अपने इस मुद्दे .. हल

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