Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर BIT डेटा प्रकार रिपोर्ट दृश्य और तालिका क्वेरी के लिए अलग-अलग है

बिट डेटा प्रकार की क्लाइंट द्वारा अलग-अलग व्याख्या की जाती है। SSMS, एक 1 को वापस रिपोर्ट करेगा या 0 थोड़ी देर के लिए उसी 1/0 की व्याख्या SSIS के डेटा प्रवाह द्वारा True के रूप में की जाती है या False

जब तक आप डेटा प्रकार को स्पष्ट रूप से नहीं बदलते हैं, तब तक स्रोत तालिका है या दृश्य SSIS के लिए कोई मायने नहीं रखता।

सेटअप के लिए, मैंने 2 टेबल और एक दृश्य बनाया है

CREATE TABLE dbo.BaseTable
(
    SomeBit bit NOT NULL
,   RowDescription varchar(50) NOT NULL
);
CREATE TABLE dbo.TargetTable
(
    SomeBit bit NOT NULL
,   RowDescription varchar(50) NOT NULL
,   SourcePackage nvarchar(100) NOT NULL
);
GO
CREATE VIEW dbo.MyView
AS
SELECT
    BT.SomeBit
,   BT.RowDescription
FROM
    dbo.BaseTable AS BT;
GO
INSERT INTO 
    dbo.BaseTable
(
    SomeBit
,   RowDescription
)
VALUES
    (CAST(0 AS bit), 'Falsification')
,   (CAST(1 AS bit), 'True dat');
GO

इस बिंदु पर, यदि मैं SSMS का उपयोग करता हूं और dbo.BaseTable या dbo.MyView को क्वेरी करता हूं, तो मुझे 1 और 0 वापस मिलेगा। लेकिन फिर, ये केवल प्रस्तुति की कलाकृतियां हैं। सी में, 0 गलत है और कोई भी संख्यात्मक मान जो 0 नहीं है सत्य है। एक्सेल इसे FALSE और TRUE के रूप में प्रस्तुत करेगा। प्रत्येक ग्राहक बूलियन मान का स्थानीय प्रतिनिधित्व जो कुछ भी करता है, उसमें मूल्य की व्याख्या करेगा। SSIS ने सही और गलत चुना।

मैंने एक साधारण पैकेज बनाया है जो बेसटेबल या माईव्यू से डेटा खींचता है और इसे टेक्स्ट फ़ाइल और टेबल पर लिखता है।

मूल नियंत्रण प्रवाह इस प्रकार दिखता है

डेटा प्रवाह जटिल दिखता है लेकिन ऐसा नहीं है।

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

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

एक फ्लैट फ़ाइल के लिए ऐसा कोई अनुवाद उपलब्ध नहीं है क्योंकि बूलियन के प्रतिनिधित्व के लिए कोई "मानक" नहीं है। मुझे वाई/एन पसंद आ सकता है। फिर भी,

मैंने फ्लैट फ़ाइल में 1/0 लिखने के लिए मजबूर करने के लिए कई चीजों की कोशिश की। मैंने अपना डेटा प्रकार

. पर सेट किया है

  • बूलियन DT_BOOL
  • एकल बाइट हस्ताक्षरित int DT_I1
  • चार बाइट हस्ताक्षरित int DT_I4
  • स्ट्रिंग DT_STR

लेकिन यह कभी मायने नहीं रखता था (जो वास्तव में अजीब लगता है कि डेटा प्रकारों के बारे में एसएसआईएस कितना दृढ़ है) --- मेरा आउटपुट हमेशा एक जैसा था

False,Falsification
True,True dat

आखिरकार, अगर मुझे उस आउटपुट फ़ाइल में 0 या 1 चाहिए था, तो मुझे अपना डेटा प्रकार बदलना होगा:या तो स्रोत क्वेरी में एक स्पष्ट कास्ट के साथ या व्युत्पन्न कॉलम घटक के माध्यम से टर्नरी ऑपरेटर SomeBit ? (DT_I1)1 : (DT_I1)0 . जैसा आपको ठीक लगे, DT_I1/I2/I4/I8 का उपयोग करें

मजेदार ट्रिविया नोट:यदि आपने डेटा रूपांतरण घटक का उपयोग करना चुना है तो आपको असत्य के लिए 0, सत्य के लिए -1 या यदि आप व्युत्पन्न घटक (DT_I1) SomeBit में आलसी कास्ट का उपयोग करने जा रहे हैं। ऐसा लगता है कि वे बूलियन मूल्यों की सी व्याख्या का पालन करते हैं।

इसे Biml करें

इसके लिए मेरी बात मानने की जरूरत नहीं है। उपरोक्त तालिका परिभाषाओं और मूल्यों की आबादी का उपयोग करते हुए, यदि आप मुफ़्त ऐडऑन स्थापित करते हैं BIDS हेल्पर आप SSIS के किसी भी संस्करण के लिए समान कोड जनरेट कर सकते हैं।

BIDS हेल्पर स्थापित करने के बाद, SSIS प्रोजेक्ट पर राइट क्लिक करें और संदर्भ मेनू में, Biml फ़ाइल जोड़ें चुनें। उस फ़ाइल की सामग्री को नीचे दिए गए कोड से बदलें; सहेजें और फिर नया पैकेज बनाने के लिए राइट-क्लिक करें।

आपको फ़्लैट फ़ाइल कनेक्शन के मानों को मान्य स्थानों को इंगित करने के साथ-साथ ओले डीबी कनेक्शन स्ट्रिंग को जहाँ भी आप अपनी तालिकाएँ स्पिन करते हैं, को इंगित करने के लिए संपादित करना होगा।

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <FlatFileConnection FilePath="C:\ssisdata\so_29244868.table.csv" FileFormat="FFF_table" Name="FF_Table" />
        <FlatFileConnection FilePath="C:\ssisdata\so_29244868.view.csv" FileFormat="FFF_table" Name="FF_View" />
        <OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.0;Integrated Security=SSPI;" />
    </Connections>
    <FileFormats>
        <FlatFileFormat
            Name="FFF_table" IsUnicode="false" CodePage="1252"
            FlatFileType="RaggedRight">
            <Columns>
                <Column Name="SomeBit" DataType="Boolean" Delimiter="," />
                <Column Name="RowDescription" DataType="AnsiString" Length="50" Delimiter="CRLF"/>
            </Columns>

        </FlatFileFormat>
    </FileFormats>
    <Packages>
        <Package ConstraintMode="Parallel" Name="so_29244868">
            <Tasks>
                <Dataflow Name="DFT Table example">
                    <Transformations>
                        <OleDbSource ConnectionName="CM_OLE" Name="OLE_SRC dbo_BaseTable">
                            <ExternalTableInput Table="dbo.BaseTable" />
                        </OleDbSource>
                        <DerivedColumns Name="DER Package name">
                            <Columns>
                                <Column DataType="String" Name="SourcePackage" Length="100">"DFT Table example"</Column>
                            </Columns>
                        </DerivedColumns>
                        <Multicast Name="MC Dupe">
                            <OutputPaths>
                                <OutputPath Name="FF" />
                                <OutputPath Name="Table" />
                            </OutputPaths>
                        </Multicast>
                        <FlatFileDestination ConnectionName="FF_Table" Name="FF_DST table">
                            <InputPath OutputPathName="MC Dupe.FF" />
                        </FlatFileDestination>
                        <OleDbDestination 
                            ConnectionName="CM_OLE" 
                            Name="OLE_DST Table"
                            TableLock="false">
                            <InputPath OutputPathName="MC Dupe.Table" />
                            <ExternalTableOutput Table="[dbo].[TargetTable]"></ExternalTableOutput>
                        </OleDbDestination>
                    </Transformations>
                </Dataflow>
                <Dataflow Name="DFT View example">
                    <Transformations>
                        <OleDbSource ConnectionName="CM_OLE" Name="OLE_SRC dbo_MyView">
                            <ExternalTableInput Table="dbo.MyView" />
                        </OleDbSource>
                        <DerivedColumns Name="DER Package name">
                            <Columns>
                                <Column DataType="String" Name="SourcePackage" Length="100">"DFT View example"</Column>
                            </Columns>
                        </DerivedColumns>
                        <Multicast Name="MC Dupe">
                            <OutputPaths>
                                <OutputPath Name="FF" />
                                <OutputPath Name="Table" />
                            </OutputPaths>
                        </Multicast>
                        <FlatFileDestination ConnectionName="FF_View" Name="FF_DST view">
                            <InputPath OutputPathName="MC Dupe.FF" />
                        </FlatFileDestination>
                        <OleDbDestination 
                            ConnectionName="CM_OLE" 
                            Name="OLE_DST view"
                            TableLock="false"
                            >
                            <InputPath OutputPathName="MC Dupe.Table" />
                            <ExternalTableOutput Table="[dbo].[TargetTable]"></ExternalTableOutput>
                        </OleDbDestination>
                    </Transformations>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>
</Biml>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर तालिका के लिए INSERT कथन स्वतः उत्पन्न करने का सबसे अच्छा तरीका क्या है?

  2. स्तंभों की गतिशील सूची के साथ SQL पिवट डेटा

  3. SQL सर्वर में किसी दिनांक को छोटा करने का सबसे अच्छा तरीका क्या है?

  4. लेन-देन त्रुटि और लेन-देन के दायरे की स्थिति के लिए कार्रवाई मान्य नहीं है

  5. SQL क्वेरी में अगली पंक्ति ढूँढना और पिछली पंक्ति से मेल खाने पर ही उसे हटाना