sql in - एसक्यूएल क्रिएट टेबल सिंटैक्स पर "जहां 1=2" का उपयोग क्यों करें?




hindi pdf (7)

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2;

मैंने इंटरनेट पर कहीं भी इस कथन को पढ़ा लेकिन मैं WHERE 1=2 समझ नहीं पाया।

क्या कोई इसे कृपया समझाएगा?


Answers

Google में मेरा विश्वास, मेरे दोस्त। पहले परिणाम के नीचे से जब आप उस कथन को Google करते हैं :

उदाहरण के लिए:

CREATE TABLE suppliers
  AS (SELECT *
    FROM companies WHERE 1=2);

यह आपूर्तिकर्ताओं नामक एक नई तालिका तैयार करेगा जिसमें कंपनियों की तालिका से सभी कॉलम शामिल होंगे, लेकिन कंपनियों की तालिका से कोई डेटा नहीं होगा।


यह वाक्यविन्यास वही करता है, लेकिन यह अधिक स्पष्ट है, यह एक ही संरचना के साथ एक तालिका बनाता है, बिना डेटा के।

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees limit 0;

इस प्रकार का कमांड आमतौर पर एक टेबल की संरचना को दूसरे में कॉपी करने के लिए उपयोग किया जाता है। इस मामले में, कुंजी या बाधाओं को छोड़कर , EMPL_DEMO में employees की समान कॉलम संरचना होगी।

1=2 हमेशा False मूल्यांकन करता है जो आपको किसी भी पंक्तियों की प्रतिलिपि बनाने से रोकता है।


CREATE TABLE बनाएं (एक नई तालिका बनाएं)

EMPL_DEMO ( EMPL_DEMO कॉल किया गया)

AS (डेटा और संरचना के साथ)

SELECT * FROM employees WHERE 1=2; (कर्मचारियों में सब कुछ जहां 1 = 2। चूंकि 1 कभी नहीं 2 है - संरचना और सभी 0 मिलान पंक्तियों की प्रतिलिपि बनाएँ)

.. संरचनात्मक रूप से प्रतिलिपि बनाएँ, डेटा नहीं।


यह अपनी बाधाओं, कुंजी, अनुक्रमणिका, पहचान संपत्ति और डेटा पंक्तियों को छोड़कर किसी तालिका की संरचना की प्रतिलिपि बनाने के लिए उपयोगी हो सकता है।

यह क्वेरी EMPL_DEMO तालिका EMPL_DEMO जिसमें कर्मचारी तालिका से कॉपी की गई कोई भी पंक्ति नहीं है, WHERE 1=2 स्थिति हमेशा FALSE रूप में मूल्यांकन की जा रही है।

  CREATE TABLE EMPL_DEMO 
  AS 
  SELECT * 
  FROM employees 
  WHERE 1=2;

एसक्यूएल सर्वर में

तालिका 2 से तालिका 1 में चुनें जहां 1 = 2 (केवल संरचना)

तालिका 2 से तालिका 1 में चुनें जहां 1 = 1 (डेटा के साथ संरचना)


यह संग्रहीत proc नौकरी करता है:

CREATE PROCEDURE [dbo].[ExecIntoTable]
(
    @tableName          NVARCHAR(256),
    @storedProcWithParameters   NVARCHAR(MAX)
)
AS
BEGIN
    DECLARE @driver         VARCHAR(10)
    DECLARE @connectionString   NVARCHAR(600)
    DECLARE @sql            NVARCHAR(MAX)
    DECLARE @rowsetSql      NVARCHAR(MAX)

    SET @driver = '''SQLNCLI'''

    SET @connectionString = 
        '''server=' + 
            CAST(SERVERPROPERTY('ServerName') AS NVARCHAR(256)) + 
            COALESCE('\' + CAST(SERVERPROPERTY('InstanceName') AS NVARCHAR(256)), '') + 
        ';trusted_connection=yes'''

    SET @rowsetSql = '''EXEC ' + REPLACE(@storedProcWithParameters, '''', '''''') + ''''

    SET @sql = '
SELECT
    *
INTO 
    ' + @tableName + ' 
FROM
    OPENROWSET(' + @driver + ',' + @connectionString + ',' + @rowsetSql + ')'

    EXEC (@sql)
END
GO

यह इसका थोड़ा सा पुन: कार्य है: संग्रहीत प्रक्रिया परिणामों को तालिका में डालें ताकि यह वास्तव में काम करे।

यदि आप इसे अस्थायी तालिका के साथ काम करना चाहते हैं तो आपको ##GLOBAL तालिका का उपयोग करने और बाद में इसे छोड़ने की आवश्यकता होगी।





sql