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

स्वचालित रूप से एक उपयोगकर्ता परिभाषित तालिका प्रकार उत्पन्न करें जो मौजूदा तालिका से मेल खाता हो

मुझे समय-समय पर वही चीज चाहिए। यहां एक छोटी सी स्क्रिप्ट है जिसे मैंने एक साथ रखा है। यह थोड़ा कठिन है और मैं अपने जीवन के साथ इस पर भरोसा नहीं करूंगा, लेकिन यह मेरे मामले के लिए काफी अच्छा काम करता है। यह स्क्रिप्ट कुंजी नहीं है, लेकिन मेरे परिदृश्य के लिए यह आवश्यक नहीं है। हालांकि मैं SQL 2012 पर हूं, इसलिए मुझे पूरा यकीन नहीं है कि यह SQL 2008 की तरह काम करेगा। मैंने कुछ अधिक 'विदेशी' प्रकारों जैसे geometry के लिए इसका परीक्षण नहीं किया। , geography और दोस्तों, क्योंकि मुझे उनका इस्तेमाल करने की कभी जरूरत नहीं पड़ी।

declare
    @tablename nvarchar(50)='Users',
    @schemaname nvarchar(50)='dbo',
    @sql nvarchar(max)=N'';

select @sql += N',' + NCHAR(13) + NCHAR(10) + NCHAR(9) + N'[' + c.COLUMN_NAME + N'] [' + DATA_TYPE + N']'
    + case when c.CHARACTER_MAXIMUM_LENGTH is not null then N'(' + case c.CHARACTER_MAXIMUM_LENGTH when -1 then 'max' else cast(c.CHARACTER_MAXIMUM_LENGTH as nvarchar(10)) end + N')' else N'' end
    + case when c.DATA_TYPE = N'numeric' then N'('+CAST(NUMERIC_PRECISION as nvarchar(10))+N', '+CAST(NUMERIC_SCALE as nvarchar(10))+N')' else N'' end
    + case when c.is_nullable <> N'NO' then N' NULL' else N' NOT NULL'end
from INFORMATION_SCHEMA.COLUMNS c
where TABLE_NAME = @tablename AND TABLE_SCHEMA = @schemaname
order by ORDINAL_POSITION;

set @sql = stuff(@sql, 1, 1, N'CREATE TYPE [' + @schemaname + N'].[tab_' + @tablename + N'] AS TABLE(')
    + nchar(13) + nchar(10) + ')' + nchar(13) + nchar(10) + 'GO';
set @sql += nchar(13) + nchar(10) + '--GRANT EXEC ON TYPE::[' + @schemaname + N'].[tab_' + @tablename + N'] TO [User];'
    + nchar(13) + nchar(10) + '--GO';

print @sql
-- If you're happy with the sql, you can pass it to sp_executesql to create your type
-- exec sp_executesql @sql;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सिस्टम दृश्यों की परिभाषाओं को कैसे देखें/स्क्रिप्ट करें?

  2. टीएसक्यूएल स्प्लिट एक्सएमएल नोड्स

  3. एक बिट फ़ील्ड से दो अलग-अलग कॉलम में सही/गलत गिनती कैसे प्राप्त करें?

  4. एसक्यूएल एक चुनिंदा क्वेरी कैसे डालें?

  5. सी # नेट कोड से एक एसक्यूएल संग्रहीत प्रक्रिया में एक शून्य चर कैसे पास करें?