सम्मिलित स्क्रिप्ट में परिणाम चुनें - SQL सर्वर [बंद]


107

मेरे पास SQL Server 2008SQL Server Management Studio है।

मुझे Table1डेटाबेस 1 से डेटा का चयन करने की आवश्यकता है । फिर मुझे परिणामों में और insert values into Table1डेटाबेस 2 में कुछ मूल्यों को संपादित करना होगा ।

या मुझे इसे अन्य तरीके से करने दें।

मैं एक तालिका में डेटा को कैसे परिवर्तित कर सकता हूं insert script


क्या डेटाबेस एक ही सर्वर पर हैं? यदि ऐसा है तो आप एक से दूसरे में सम्मिलित कर सकते हैं। Database2.dbo.myTable में सम्मिलित database1.dbo.anOtherTable से डेटा का चयन
u07ch

हाँ दोनों डेटाबेस एक ही सर्वर पर हैं। लेकिन मुझे स्क्रिप्ट की जरूरत है। मैं इस स्क्रिप्ट को हमारे डेटाबेस आदमी को दूंगा।
कैप्टन कॉमिक

यह प्रश्न स्पष्ट करने में मदद करेगा। क्या कोई दृष्टिकोण काम करेगा या क्या आपको एक सम्मिलित स्क्रिप्ट की आवश्यकता है जिसे आप अपने dba को सौंप सकते हैं?
greg

जवाबों:


31

SSMS टूलपैक (जो बीयर के रूप में मुफ़्त है ) में कई शानदार विशेषताएं हैं - जिसमें टेबल से INSERT स्टेटमेंट जेनरेट करना शामिल है ।

अद्यतन: SQL सर्वर प्रबंधन स्टूडियो 2012 (और नए) के लिए, SSMS टूलपैक अब मुफ्त नहीं है, लेकिन इसके लिए मामूली लाइसेंस शुल्क की आवश्यकता होती है।


+1 @marc_s मैंने T-SQL जनरेटर स्क्रिप्ट को एकजुट करने वाली ऐसी सम्मिलित स्क्रिप्ट बनाने में बहुत काम किया है और अब आप मुझे बताते हैं कि एक उपकरण है।
bernd_k

जब टेबल मनी डेटा स्टोर करते हैं तो सावधान रहें । वे डेटा प्रकार सामान्य रूप से प्रदर्शित या SSMS टूलपैक द्वारा उत्पन्न स्क्रिप्ट की तुलना में अधिक दशमलव स्थानों को संग्रहीत कर सकते हैं
bernd_k

13
यह अब मुफ्त नहीं है। ssmstoolspack.com/Licensing
greg

@Greg: यह इंगित करने के लिए धन्यवाद। नोट: कि लाइसेंसिंग केवल SQL सर्वर प्रबंधन स्टूडियो 2012 और नए पर लागू होता है - पूर्व संस्करणों के लिए, टूलपैक अभी भी मुफ़्त है।
marc_s

4
SSMS टूलपैक के लिए वैकल्पिक ?
कीकेनेट

155

यहाँ एक और तरीका है, जो कुछ स्थितियों में प्लगइन्स या बाहरी उपकरणों को स्थापित करने से आसान हो सकता है:

  • ए करें ।select [whatever you need]INTO temp.table_namefrom [... etc ...]
  • ऑब्जेक्ट एक्सप्लोरर में डेटाबेस पर राइट-क्लिक करें => कार्य => लिपियों को उत्पन्न करें
  • temp.table_name"ऑब्जेक्ट चुनें" स्क्रीन में चयन करें , अगला क्लिक करें।
  • "निर्दिष्ट करें कि स्क्रिप्ट को कैसे सहेजा जाना चाहिए" स्क्रीन:
    • उन्नत पर क्लिक करें, "स्क्रिप्ट के प्रकार के डेटा" गुण ढूंढें, "डेटा केवल" चुनें, उन्नत गुणों को बंद करें।
    • "नई क्वेरी विंडो में सहेजें" चुनें (जब तक कि आपके पास हजारों रिकॉर्ड न हों)।
  • अगला पर क्लिक करें, नौकरी पूरी होने तक प्रतीक्षा करें, परिणामी INSERTकथनों को एक नई क्वेरी विंडो में देखें।
  • सभी [temp.table_name]को बदलने के लिए ढूँढें और बदलें का उपयोग करें [your_table_name]
  • drop table [temp.table_name]

INTO temp.table1 का उपयोग करना निम्न त्रुटि उत्पन्न करता है: निर्दिष्ट स्कीमा नाम "अस्थायी" या तो मौजूद नहीं है या आपके पास इसका उपयोग करने की अनुमति नहीं है। मैं SQL 2012 का उपयोग कर रहा हूं।
मार्क

3
tempयहां आपके द्वारा एक्सेस किए गए किसी भी स्कीमा को संदर्भित किया गया है। आप या तो एक ( create schema temp) बना सकते हैं और फिर इसे हटा सकते हैं जब आप कर रहे हैं, या (बेहतर) बस उस स्कीमा का उपयोग करें जो आप वर्तमान में काम कर रहे हैं
केटी।

1
इसके लिए धन्यवाद, मुझे पता था कि एक रास्ता होना चाहिए! वैसे, यदि आप केवल उस तालिका से संपूर्ण डेटा की आवश्यकता कर सकते हैं जिसे आप स्क्रिप्ट करना चाहते हैं, तो आप अस्थायी तालिका बनाना छोड़ सकते हैं।
FAB

मुझे Azure डेटाबेस में डेटा आयात करने के लिए इसका उपयोग करना पड़ा। इसे एक गैर-एज़्योर डेटाबेस में आयात करें और फिर SQL आवेषण के रूप में निकालें।
m12lrpv

2
यह अभी भी मुझे आश्चर्यचकित करता है कि एसएसएमएस ने परिणाम सेट पर इस क्षमता 'व्यू आउटपुट के रूप में इंसर्ट स्क्रिप्ट' को नहीं जोड़ा है .. लेकिन उपरोक्त दृष्टिकोण काम करता है, हालांकि यह एक उचित बल्क इंसर्ट करने के बजाय अलग-अलग इंसर्ट कमांड बनाता है (प्रति आइटम 1,000 आइटम सम्मिलित करें ) जैसा होना चाहिए। यह वास्तव में बड़े परिणाम सेट पर चलने के लिए हमेशा के लिए ले जा सकता है
Traderhut Games

60

SSMS में:

  • डेटाबेस> कार्य> जनरेट लिपियों पर राइट क्लिक करें

  • आगे

  • "विशिष्ट डेटाबेस ऑब्जेक्ट्स का चयन करें" चुनें और उस तालिका को जांचें जिसे आप स्क्रिप्टेड चाहते हैं, अगला

  • Advanced >विकल्पों की सूची में क्लिक करें, नीचे की ओर स्क्रॉल करें और "स्क्रिप्ट के प्रकार के डेटा" देखें और इसे "डेटा" "" पर बदलें।

  • "नई क्वेरी विंडो में सहेजें"> अगला> अगला> समाप्त करें चुनें

सभी 180 पंक्तियों को अब 180 सम्मिलित कथन के रूप में लिखा गया है!


12
कुछ पंक्तियों के लिए उपयोगी। उपयोगी नहीं : यदि किसी तालिका में 20000 पंक्तियाँ हैं, और मुझे 20 पंक्तियों के लिए केवल 20 आवेषण चाहिए।
किकेनेट

2
@Kiquenet - आप पहले एक दृश्य बना सकते हैं जो आपकी वांछित 20 पंक्तियों का चयन करता है, फिर दृश्य के आधार पर सम्मिलित स्क्रिप्ट बनाने के लिए इन चरणों का पालन करें। फिर आप एक बड़े पैमाने पर खोज कर सकते हैं और दृश्य नाम बदलने के लिए जो भी तालिका नाम आपको सम्मिलित करने की आवश्यकता है उसे वापस बदल सकते हैं।
सितंबर

@ यह आप की तरह देखें पर काम नहीं करता है, लेकिन यह विजुअल स्टूडियो में ऐसा करता है: पहले आप sql स्टूडियो में आवश्यक चयन के साथ एक दृश्य बनाते हैं, फिर Visual Studio को खोलते हैं, sql सर्वर से कनेक्ट होते हैं और उस निर्मित दृश्य पर स्क्रिप्ट उत्पन्न करते हैं।
सर्गई

इस जानकारी के लिए धन्यवाद। हालांकि पूरी मेज को डंप करना एक ओवरकिल है, लेकिन इससे मेरी समस्या हल हो गई।
पौलज़

जीवन रक्षक। मैंने पूरी जिंदगी स्क्रिप्ट लिखी है।
जे

38

मूल विधि :

उदाहरण के लिए यदि आपके पास तालिका है

Users(Id, name)

तुम यह केर सकते हो:

select 'insert into Table values(Id=' + Id + ', name=' + name + ')' from Users

आप इसे इस तरह से कर सकते हैं, लेकिन अगर आपके पास कुछ टेबल्स से अधिक है तो यह थोड़ा टाइप हो जाता है। Google पर ऐसे लिखित और खोज योग्य हैं जो आपके लिए ऐसा करते हैं, या, यदि आपके पास VS2012 है तो आप VS को आपके लिए कर सकते हैं। नीचे मेरा जवाब देखें।
greg

1
कुछ क्षेत्रों के साथ तालिकाओं के लिए उपयोगी। यदि किसी तालिका में 50, 60, 100 कॉलम उपयोगी नहीं हैं। बेहतर जनरेशन SQL कोड
Kiquenet

23

1- लिपियों की व्याख्या

ए) तालिका में डेटा डालने के लिए सिंटैक्स नीचे दिया गया है

Insert into table(col1,col2,col3,col4,col5)    

             -- To achieve this part i    
             --have used below variable
                ------@CSV_COLUMN-------

values(Col1 data in quote, Col2..quote,..Col5..quote)

-- To achieve this part 
-- i.e column data in 
--quote i have used 
--below variable
----@QUOTED_DATA---

सी) मौजूदा तालिका से उपरोक्त डेटा प्राप्त करने के लिए हमें चुनिंदा क्वेरी को इस तरह से लिखना होगा कि आउटपुट स्क्रिप्ट के रूप में होगा

डी) तब अंत में मैंने अंतिम स्क्रिप्ट बनाने के लिए चर से ऊपर का भाग लिया है जो निष्पादन पर सम्मिलित स्क्रिप्ट उत्पन्न करेगा

इ)

@TEXT='SELECT ''INSERT INTO
 '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

एफ) और अंत में उपरोक्त क्वेरी को निष्पादित किया गया EXECUTE(TEXT)

G) QUOTENAME()फ़ंक्शन का उपयोग स्तंभ डेटा को उद्धरण के अंदर लपेटने के लिए किया जाता है

एच) ISNULLका उपयोग किया जाता है क्योंकि यदि किसी भी पंक्ति में NULL किसी भी कॉलम के लिए डेटा विफल रहता है और NULLयही कारण है कि मैं उपयोग करने से बचने के लिए thats वापस लौटाता हूंISNULL

मैं) और sp_generate_insertscripts उसी के लिए सपा बनाया

1- बस जिसको आप चाहते हैं उसके लिए टेबल का नाम रखें insert script

2- यदि आप विशिष्ट परिणाम चाहते हैं तो फ़िल्टर स्थिति

----------Final Procedure To generate Script------

CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLE_NAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''
)
AS
BEGIN

SET NOCOUNT ON

DECLARE @CSV_COLUMN VARCHAR(MAX),
        @QUOTED_DATA VARCHAR(MAX),
        @TEXT VARCHAR(MAX)

SELECT @CSV_COLUMN=STUFF
(
    (
     SELECT ',['+ NAME +']' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @QUOTED_DATA=STUFF
(
    (
     SELECT ' ISNULL(QUOTENAME('+NAME+','+QUOTENAME('''','''''')+'),'+'''NULL'''+')+'','''+'+' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @TEXT='SELECT ''INSERT INTO '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

--SELECT @CSV_COLUMN AS CSV_COLUMN,@QUOTED_DATA AS QUOTED_DATA,@TEXT TEXT

EXECUTE (@TEXT)

SET NOCOUNT OFF

END

आपने एक अद्भुत काम किया ...
दिनेशबडी an

14

यह Visual Studio SQL Server ऑब्जेक्ट एक्सप्लोरर के माध्यम से करना संभव है ।

आप आवश्यक तालिका, फ़िल्टर परिणामों के लिए संदर्भ मेनू से "डेटा देखें" पर क्लिक कर सकते हैं और परिणाम को स्क्रिप्ट के रूप में सहेज सकते हैं।


1
विजुअल स्टूडियो में एसक्यूएल सर्वर डेटा टूल्स का उपयोग करके आपकी पोस्ट सही और सबसे आसान तरीका है, यहाँ और यहाँ पोस्ट है जो बताती है कि पहले 1000 मिलियन आशाओं के लिए सम्मिलित विवरण कैसे उत्पन्न होता है
शैजुत

8

दृश्य स्टूडियो का उपयोग करना, निम्नलिखित करें

SQL सर्वर -> SQL सर्वर डेटाबेस प्रोजेक्ट प्रकार की एक परियोजना बनाएँ

SQL सर्वर एक्सप्लोरर CTL- \, CTL-S खोलें

SQL सर्वर आइकन पर राइट क्लिक करके SQL सर्वर जोड़ें। Selcet ADD NEW SERVER

जिस तालिका में आप रुचि रखते हैं, उसके लिए नीचे नेविगेट करें

राइट क्लिक -> देखें डेटा

सब कुछ उजागर करने के लिए शीर्ष बाएँ सेल पर क्लिक करें (ctl-A doesnt काम करने के लिए लगता है)

राइट क्लिक -> SCript

यह शानदार है। मैंने वर्षों से ऊपर सूचीबद्ध सभी चीजों की कोशिश की है। मुझे पता है कि वहाँ एक उपकरण है जो ऐसा करेगा और बहुत कुछ करेगा, इसके बारे में नहीं सोच सकता। लेकिन यह बहुत महंगा है।

सौभाग्य। मुझे यह समझ में आया। बड़े पैमाने पर w / पाठ क्षेत्रों आदि का परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि यह आपको सड़क के नीचे एक लंबा रास्ता तय करता है।

ग्रेग


1
यह चुनिंदा परिणामों को परिवर्तित नहीं करता है, यह केवल तालिका को बाहर करता है।
एरिक के

@QuantumDynamix - मूल प्रश्न 'नीचे एक तालिका में एक स्क्रिप्ट में डेटा परिवर्तित कर सकते हैं।' नीचे मेरे दृष्टिकोण का एक नमूना है। यह वही है जो उपयोगकर्ता ने पूछा था। वास्तव में, यह एकमात्र समाधान है जो मैं देखता हूं कि वास्तव में आवेषण की एक स्क्रिप्ट का उत्पादन होता है, जैसा कि उपयोगकर्ता पूछता है। क्यों होता है पतन? 'चुनिंदा परिणामों को परिवर्तित नहीं करता' का क्या अर्थ है? SET IDENTITY_INSERT [PMDB]। [BUAttr] INSERT INTO [PMDB] पर। [BUAttr] ([id], [BU], [Name], [Value]) VALUES (1, N'ALASKA ', N'GeoCenter Lat' , N'67.07213 ')
ग्रेग

अस्थायी तालिकाओं के निर्माण के साथ, यह मेरे लिए था
harishr

4

उदाहरण के लिए कथन का उपयोग करके एक अलग तालिका बनाएं

[Dbo] से टेस्ट_123 में * का चयन करें। [कर्मचारी] जहाँ '% Test%' जैसा नाम है

डेटाबेस पर राइट-क्लिक करें डेटाबेस पर क्लिक करें जेनरेट स्क्रिप्ट पर क्लिक करें अपनी तालिका का चयन करें एडवांस विकल्प चुनें और "डेटा केवल" नई क्वेरी में खोलें "फ़ाइल का चयन करें" विशेषता का चयन करें

Sql आपके लिए स्क्रिप्ट उत्पन्न करेगा


3

आप एसएसएमएस में 'रिजल्ट टू फाइल' विकल्प चुन सकते हैं और अपने चुनिंदा रिजल्ट को फाइल करने और रिजल्ट फाइल में बदलाव करने के लिए निर्यात कर सकते हैं और अंत में बीसीपी - बल्क कॉपी का उपयोग करके आप डेटाबेस 2 में तालिका 1 में सम्मिलित कर सकते हैं।

मुझे लगता है कि बल्क डालने के लिए आपको .rpt फ़ाइल को .csv फ़ाइल में बदलना होगा

आशा है कि यह मदद करेगा।


2

मुझे एक समान समस्या थी, लेकिन मुझे एक क्वेरी (फ़िल्टर आदि के साथ) से एक INSERT स्टेटमेंट बनाने में सक्षम होने की आवश्यकता थी।

इसलिए मैंने निम्नलिखित प्रक्रिया बनाई:

CREATE PROCEDURE dbo.ConvertQueryToInsert (@input NVARCHAR(max), @target NVARCHAR(max)) AS BEGIN

    DECLARE @fields NVARCHAR(max);
    DECLARE @select NVARCHAR(max);

    -- Get the defintion from sys.columns and assemble a string with the fields/transformations for the dynamic query
    SELECT
        @fields = COALESCE(@fields + ', ', '') + '[' + name +']', 
        @select = COALESCE(@select + ', ', '') + ''''''' + ISNULL(CAST([' + name + '] AS NVARCHAR(max)), ''NULL'')+'''''''
    FROM tempdb.sys.columns 
    WHERE [object_id] = OBJECT_ID(N'tempdb..'+@input);

    -- Run the a dynamic query with the fields from @select into a new temp table
    CREATE TABLE #ConvertQueryToInsertTemp (strings nvarchar(max))
    DECLARE @stmt NVARCHAR(max) = 'INSERT INTO #ConvertQueryToInsertTemp SELECT '''+ @select + ''' AS [strings] FROM '+@input
    exec sp_executesql @stmt

    -- Output the final insert statement 
    SELECT 'INSERT INTO ' + @target + ' (' + @fields + ') VALUES (' + REPLACE(strings, '''NULL''', 'NULL') +')' FROM #ConvertQueryToInsertTemp

    -- Clean up temp tables
    DROP TABLE #ConvertQueryToInsertTemp
    SET @stmt = 'DROP TABLE ' + @input
    exec sp_executesql @stmt
END

फिर आप अपनी क्वेरी का आउटपुट टेम्प टेबल में लिखकर और प्रक्रिया चलाकर इसका उपयोग कर सकते हैं:

-- Example table
CREATE TABLE Dummy (Id INT, Comment NVARCHAR(50), TimeStamp DATETIME)
INSERT INTO Dummy VALUES (1 , 'Foo', GetDate()), (2, 'Bar', GetDate()), (3, 'Foo Bar', GetDate())

-- Run query and procedure
SELECT * INTO #TempTableForConvert FROM Dummy WHERE Id < 3
EXEC dbo.ConvertQueryToInsert '#TempTableForConvert', 'dbo.Dummy'

नोट: यह प्रक्रिया केवल स्ट्रिंग को मान देती है जिससे डेटा थोड़ा अलग दिखाई दे सकता है। उदाहरण के लिए DATETIME के ​​साथ सेकंड खो जाएगा।


2

यह एक अधिक बहुमुखी समाधान है (जो सवाल पूछता है की तुलना में थोड़ा अधिक कर सकता है), और क्वेरी विंडो में इस्तेमाल किया जा सकता है बिना एक नया संग्रहित खरीद बनाने के लिए - उदाहरण के लिए उत्पादन डेटाबेस में उपयोगी है जहां आपके पास पहुंच नहीं है। ।

कोड का उपयोग करने के लिए, कृपया लाइन टिप्पणियों के अनुसार संशोधित करें जो इसके उपयोग की व्याख्या करती है। फिर आप इस क्वेरी को क्वेरी विंडो में चला सकते हैं और यह आपके द्वारा आवश्यक INSERT स्टेटमेंट को प्रिंट करेगा।

SET NOCOUNT ON

-- Set the ID you wish to filter on here
DECLARE @id AS INT = 123

DECLARE @tables TABLE (Name NVARCHAR(128), IdField NVARCHAR(128), IdInsert BIT, Excluded NVARCHAR(128))

-- Add any tables you wish to generate INSERT statements for here. The fields are as thus:
 -- Name: Your table name
 -- IdField: The field on which to filter the dataset
 -- IdInsert: If the primary key field is to be included in the INSERT statement
 -- Excluded: Any fields you do not wish to include in the INSERT statement
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable1', 'Id', 0, 'Created,Modified')
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable2', 'Id', 1, 'Created,Modified')

DECLARE @numberTypes TABLE (sysId TINYINT)

-- This will ensure INT and BIT types are not surrounded with quotes in the
-- resultant INSERT statement, but you may need to add more (from sys.types)
INSERT @numberTypes(SysId) VALUES(56),(104)

DECLARE @rows INT = (SELECT COUNT(*) FROM @tables)
DECLARE @cnt INT = 1

DECLARE @results TABLE (Sql NVARCHAR(4000))

WHILE @cnt <= @rows
BEGIN
    DECLARE @tablename AS NVARCHAR(128)
    DECLARE @idField AS NVARCHAR(128)
    DECLARE @idInsert AS BIT
    DECLARE @excluded AS NVARCHAR(128)
    SELECT
        @tablename = Name,
        @idField = IdField,
        @idInsert = IdInsert,
        @excluded = Excluded
    FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowId FROM @tables) t WHERE t.RowId = @cnt

    DECLARE @excludedFields TABLE (FieldName NVARCHAR(128))
    DECLARE @xml AS XML = CAST(('<X>' + REPLACE(@excluded, ',', '</X><X>') + '</X>') AS XML)
    INSERT INTO @excludedFields SELECT N.value('.', 'NVARCHAR(128)') FROM @xml.nodes('X') AS T(N)

    DECLARE @setIdentity NVARCHAR(128) = 'SET IDENTITY_INSERT ' + @tablename

    DECLARE @execsql AS NVARCHAR(4000) = 'SELECT ''' + CASE WHEN @idInsert = 1 THEN @setIdentity + ' ON' + CHAR(13) ELSE '' END + 'INSERT INTO ' + @tablename + ' ('
    SELECT @execsql = @execsql +
    STUFF
    (
        (
            SELECT CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN ', ' + name ELSE '' END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 2, ''
    ) +
    ')' + CHAR(13) + 'VALUES (' +
    STUFF
    (
        (
            SELECT
                CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN
                    ''', '' + ISNULL(' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ''''''''' + ' END +
                    'CAST(' + name + ' AS VARCHAR)' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ' + ''''''''' END +
                    ', ''NULL'') + '
                ELSE ''
                END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 3, ''
    ) +
    ''')' + CASE WHEN @idInsert = 1 THEN CHAR(13) + @setIdentity + ' OFF' ELSE '' END +
    ''' FROM ' + @tablename + ' WHERE ' + @idField + ' = ' + CAST(@id AS VARCHAR)

    INSERT @results EXEC (@execsql)
    DELETE @excludedFields
    SET @cnt = @cnt + 1
END

DECLARE cur CURSOR FOR SELECT Sql FROM @results
OPEN cur

DECLARE @sql NVARCHAR(4000)
FETCH NEXT FROM cur INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @sql
    FETCH NEXT FROM cur INTO @sql
END

CLOSE cur
DEALLOCATE cur

1

आप विशेष रूप से आयात और निर्यात ऑपरेशन के लिए डिज़ाइन किए गए Sql सर्वर एकीकरण सेवा संकुल का उपयोग कर सकते हैं ।

यदि आपके पास Sql सर्वर पूरी तरह से स्थापित है, तो VS के पास इन पैकेजों को विकसित करने के लिए एक पैकेज है।

बिजनेस इंटेलिजेंस डेवलपमेंट स्टूडियो में एकीकरण सेवाएं


1

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

http://vscontrols.blogspot.com/2010/09/import-and-export-excel-to-sql-server.html


1

मैंने निम्नलिखित बनाया procedure:

if object_id('tool.create_insert', 'P') is null
begin
  exec('create procedure tool.create_insert as');
end;
go

alter procedure tool.create_insert(@schema    varchar(200) = 'dbo',
                                   @table     varchar(200),
                                   @where     varchar(max) = null,
                                   @top       int = null,
                                   @insert    varchar(max) output)
as
begin
  declare @insert_fields varchar(max),
          @select        varchar(max),
          @error         varchar(500),
          @query         varchar(max);

  declare @values table(description varchar(max));

  set nocount on;

  -- Get columns
  select @insert_fields = isnull(@insert_fields + ', ', '') + c.name,
         @select = case type_name(c.system_type_id)
                      when 'varchar' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + cast(' + c.name + ' as varchar) + '''''''', ''null'')'
                      when 'datetime' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + convert(varchar, ' + c.name + ', 121) + '''''''', ''null'')'
                      else isnull(@select + ' + '', '' + ', '') + 'isnull(cast(' + c.name + ' as varchar), ''null'')'
                    end
    from sys.columns c with(nolock)
         inner join sys.tables t with(nolock) on t.object_id = c.object_id
         inner join sys.schemas s with(nolock) on s.schema_id = t.schema_id
   where s.name = @schema
     and t.name = @table;

  -- If there's no columns...
  if @insert_fields is null or @select is null
  begin
    set @error = 'There''s no ' + @schema + '.' + @table + ' inside the target database.';
    raiserror(@error, 16, 1);
    return;
  end;

  set @insert_fields = 'insert into ' + @schema + '.' + @table + '(' + @insert_fields + ')';

  if isnull(@where, '') <> '' and charindex('where', ltrim(rtrim(@where))) < 1
  begin
    set @where = 'where ' + @where;
  end
  else
  begin
    set @where = '';
  end;

  set @query = 'select ' + isnull('top(' + cast(@top as varchar) + ')', '') + @select + ' from ' + @schema + '.' + @table + ' with (nolock) ' + @where;

  insert into @values(description)
  exec(@query);

  set @insert = isnull(@insert + char(10), '') + '--' + upper(@schema + '.' + @table);

  select @insert = @insert + char(10) + @insert_fields + char(10) + 'values(' + v.description + ');' + char(10) + 'go' + char(10)
    from @values v
   where isnull(v.description, '') <> '';
end;
go

तो आप इसे इस तरह से उपयोग कर सकते हैं:

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @where  = 'id = 1',
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

आउटपुट कुछ इस तरह होगा:

--DBO.CUSTOMER
insert into dbo.customer(id, name, type)
values(1, 'CUSTOMER NAME', 'F');
go

यदि आप केवल पंक्तियों की एक सीमा प्राप्त करना चाहते हैं, तो @topपैरामीटर को bellow के रूप में उपयोग करें :

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @top    = 100,
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

यह मदद करता है लेकिन इसने इस क्षेत्र को "6C2A94737A456C405FDCF793DFA6E661: BqRc / DpUIe27" को केवल "6C2A94747A456C405FDC379DFA6E6"
एडम मेंडोज़ा

0

यदि आप Oracle का उपयोग कर रहे हैं (या SQL सर्वर पर एप्लिकेशन को कॉन्फ़िगर करते हैं) तो Oracle SQL डेवलपर आपके लिए ऐसा करता है। किसी तालिका के लिए 'अनलोड' चुनें और विकल्प का अनुसरण करें (यदि आप सभी तालिकाएँ बनाना नहीं चाहते हैं तो DDL को अनचेक करें)।


1
यह स्पष्ट रूप से SQL सर्वर प्रश्न के रूप में चिह्नित किया गया है ...
बेंटऑन कोडिंग

Sql सर्वर के साथ oracle sql डेवलपर का उपयोग करना भी संभव है। मैंने अपनी प्रतिक्रिया संपादित की है।
लियाम

0

मुझे यह एसएमएसएमएस बूस्ट एडऑन मिला , जो मुफ़्त है और अन्य चीजों के बीच बिल्कुल यही करता है। आप परिणामों पर राइट क्लिक कर सकते हैं और स्क्रिप्ट डेटा को चुन सकते हैं।


मुझे स्क्रिप्ट ग्रिड डेटा दिखाई देता है, लेकिन परिणाम से SQL इन्सर्ट उत्पन्न नहीं करता
Kiquenet


-1

INSERT INTO SELECTएक तालिका में चुनिंदा क्वेरी के परिणामों को सम्मिलित करने के लिए आप एक स्टेटमेंट का उपयोग कर सकते हैं । http://www.w3schools.com/sql/sql_insert_into_select.asp

उदाहरण:

INSERT INTO Customers (CustomerName, Country) SELECT SupplierName, Country FROM Suppliers WHERE Country='Germany';

1
इसका INSERT कथनों में परिवर्तित होने वाले SELECT कथन के परिणाम से कोई लेना-देना नहीं है। यह केवल सादा INSERT कथन है।
नील्स लुकास

क्या यह कार्यात्मक रूप से समतुल्य नहीं है?
रक्षक एक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.