एसक्यूएल स्कीमा और मूल्य

मेरे पास एक चुनिंदा बयान है जिसे मैं बनाना चाहता हूं। मैं चुनना चाहता हूँ

SELECT COLUMN_NAME AS FieldName FROM   
INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'table1'

हालांकि मैं वैल्यू नामक एक और कॉलम बनाना चाहता हूं जो तालिका 1 में एक विशेष पंक्ति है तो मेरे पास कॉलम नाम और इसी एकल मान की पंक्तियां हैं। इस दृष्टिकोण के बारे में कोई विचार?

0
जोड़ा संपादित
विचारों: 1
तालिका 1 में आपका क्या मतलब है "एक विशेष पंक्ति"? आप एक SQL क्वेरी में स्थिर जोड़ सकते हैं, बस SELECT 'Value'
जोड़ा लेखक N West, स्रोत

3 उत्तर

मैं वास्तव में एक पागल समाधान के साथ आया लेकिन यह काम करता है:

declare @tbl_name as varchar(255)
declare @field as varchar(255)
declare @val as varchar(255)
declare @SQL as nvarchar(4000)

create table #tbl ( [FieldName][varchar](255), [FieldVal][varchar](255))

set @tbl_name = 'table1'

DECLARE mah_cursor CURSOR FAST_FORWARD 
FOR 
SELECT COLUMN_NAME FROM  
INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @tbl_name

OPEN mah_cursor

FETCH NEXT FROM mah_cursor INTO @field 

WHILE @@FETCH_STATUS = 0
BEGIN



set @SQL = 'set @val = (Select top 1 ' + @field + ' from ' + @tbl_name + ')' 
print @SQL


exec sp_executesql @query = @SQL, @params = N'@val varchar(255) OUTPUT', @val = @val      OUTPUT

 insert into #tbl ([FieldName],[FieldVal] ) values (@field, @val)

 FETCH NEXT FROM mah_cursor INTO @field
 END

CLOSE mah_cursor 
DEALLOCATE mah_cursor 

select * from #tbl

drop table #tbl

यह प्रत्येक मान के माध्यम से loops और इसे जोड़ता है। Fast_Forward सुविधा उच्च प्रदर्शन के लिए क्वेरी को अनुकूलित करती है

0
जोड़ा

एक क्रॉस जॉइन का उपयोग करें, जो कि अगर आप दो टेबलों में से कोई भी शामिल नहीं होते हैं, तो कृपया निहित है (यानी, t1, t2 से):

SELECT COLUMN_NAME AS FieldName,
       Table1.MyField
FROM
    INFORMATION_SCHEMA.COLUMNS, Table1
WHERE
    TABLE_NAME = 'table1'
AND
    MyTable.ID = 123
0
जोड़ा
जोड़ा लेखक marc_s, स्रोत

निम्न क्वेरी प्रत्येक कॉलम के लिए मान (न्यूनतम) उत्पन्न करती है:

    SELECT '''select '+COLUMN_NAME+''' AS FieldName, (select cast(MIN('+COLUMN_NAME+') as varchar(8000)) from '+const.tablename+')'
    FROM INFORMATION_SCHEMA.COLUMNS c cross join
         (select 'AllCurveNames' as tablename) const
    WHERE c.TABLE_NAME = const.tablename

हालांकि, यह प्रत्येक पंक्ति के लिए एक अलग क्वेरी पैदा करता है। उन्हें एक साथ जोड़ने के लिए, आपको एक स्ट्रिंग कुल समावेशन की आवश्यकता है। SQL सर्वर में यह है कि आप इसे कैसे करेंगे:

    declare @sql varchar(max);

    SELECT @sql = (select 'select '''+COLUMN_NAME+''' AS FieldName, (select cast(MIN('+COLUMN_NAME+') as varchar(8000)) from '+const.tablename + ') union all '
                   FROM INFORMATION_SCHEMA.COLUMNS c cross join
                        (select WHATEVER as tablename) const
                   WHERE c.TABLE_NAME = const.tablename
                   for xml path('')
                  );
    select @sql = LEFT(@sql, len(@sql) - 9);
    exec(@sql);
0
जोड़ा