से प्रेरित यहाँ, एक है अगर आप सिर्फ SELECT ... INTO #Temp
(याद #Temp
सत्र के दायरे वाला सबसे खराब) कर सकते हैं https://stackoverflow.com/a/14328779/162273 से चोरी से कुछ के साथ:
SELECT
c.name AS UsefulRawName,
',' + c.name + ' ' + UPPER(t.name) +
CASE
WHEN t.name IN ('char', 'nchar', 'varchar', 'nvarchar') THEN '(' + CAST(c.max_length AS VARCHAR(3)) + ')'
WHEN t.name IN ('decimal', 'numeric') THEN '(' + CAST(c.[precision] AS VARCHAR(3)) + ', ' + CAST(c.[scale] AS VARCHAR(3)) + ')'
ELSE '' END + CASE WHEN c.Is_Nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END AS SQLColumnType,
'public ' +
CASE
WHEN t.name IN ('varchar', 'nvarchar', 'text', 'ntext', 'char', 'nchar', 'xml', 'sysname') THEN 'string'
WHEN t.name IN ('binary', 'varbinary', 'image') THEN 'byte[]' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('uniqueidentifier') THEN 'Guid' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('datetimeoffset') THEN 'DateTimeOffset' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('date', 'time', 'datetime2', 'smalldatetime', 'datetime') THEN 'DateTime' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('numeric', 'decimal', 'real', 'money', 'smallmoney') THEN 'decimal' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('float') THEN 'float' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('tinyint', 'smallint') THEN 'short' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('int') THEN 'int' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('bit') THEN 'bool' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('bigint') THEN 'long' + CASE WHEN c.Is_Nullable = 1 THEN '?' ELSE '' END
WHEN t.name IN ('timestamp') THEN 'ulong'
ELSE 'object' END + ' ' + c.name + ' { get; set; }' AS CSColumnType,
c.name + ' = ' +
CASE
WHEN t.name IN ('varchar', 'nvarchar', 'text', 'ntext', 'char', 'nchar', 'xml', 'sysname') THEN 'reader["' + c.name + '"] as string,'
WHEN t.name IN ('binary', 'varbinary', 'image') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as byte[]?,'
ELSE '(byte[])reader["' + c.name + '"],' END
WHEN t.name IN ('uniqueidentifier') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as Guid?,'
ELSE '(Guid)reader["' + c.name + '"],' END
WHEN t.name IN ('datetimeoffset') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as DateTimeOffset?,'
ELSE '(DateTimeOffset)reader["' + c.name + '"],' END
WHEN t.name IN ('date', 'time', 'datetime2', 'smalldatetime', 'datetime') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as DateTime?,'
ELSE '(DateTime)reader["' + c.name + '"],' END
WHEN t.name IN ('numeric', 'decimal', 'real', 'money', 'smallmoney') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as decimal?,'
ELSE '(decimal)reader["' + c.name + '"],' END
WHEN t.name IN ('float') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as float?,'
ELSE '(float)reader["' + c.name + '"],' END
WHEN t.name IN ('tinyint', 'smallint') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as short?,'
ELSE '(short)reader["' + c.name + '"],' END
WHEN t.name IN ('int') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as int?,'
ELSE '(int)reader["' + c.name + '"],' END
WHEN t.name IN ('bit') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as bool?,'
ELSE '(bool)reader["' + c.name + '"],' END
WHEN t.name IN ('bigint') THEN CASE
WHEN c.Is_Nullable = 1 THEN 'reader["' + c.name + '"] as long?,'
ELSE '(long)reader["' + c.name + '"],' END
WHEN t.name IN ('timestamp') THEN '(ulong)reader["' + c.name + '"],'
ELSE 'reader["' + c.name + '"] == DBNull.Value ? null : reader["' + c.name + '"],' END AS ReaderStatements
FROM tempDb.sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id AND t.system_type_id = t.user_type_id
WHERE [object_id] = OBJECT_ID('tempdb..#Temp')
ORDER BY column_id
एक अधिक प्रेरित व्यक्ति प्रकारों के कुछ स्मार्ट मैपिंग को स्वचालित रूप से .NET समकक्षों को कर सकता है लेकिन यह इतना बुरा नहीं है और स्निपेट को छोटा रखता है।
इन प्रकारों को मैन्युअल रूप से परिवर्तित करने से स्क्रिप्ट को विस्तारित करने वाले बट में पर्याप्त दर्द था। सुनिश्चित नहीं है कि मेरे रूपांतरण सभी सही हैं।
यह उन मूल्यों को पुनर्प्राप्त करने के लिए किस भाषा/प्लेटफ़ॉर्म का उपयोग किया जाता है, इस पर निर्भर करता है। –