mam*_*esh 2 sql sql-server sql-server-2008
我经常在SQL中创建临时表,我正在研究一种为表定义自动生成列名和数据类型的方法,因此我不必每次都查看它们.
比如我运行:
SELECT CustomerID
ClientID,
FirstName
LastName
INTO #Test
From dbo.Customer
Run Code Online (Sandbox Code Playgroud)
最初使用我需要的相应列和数据设置临时表.一旦我完成所有这些,我就回去并取出INTO语句并写下以下内容:
CREATE TABLE #Test
(
...
...
);
Run Code Online (Sandbox Code Playgroud)
我想找到一种方法来自初始创建临时表自动生成列名和数据类型.现在,因为我最初插入自动创建的临时表,我使用这个:
EXEC tempdb..sp_help '#Test';
Run Code Online (Sandbox Code Playgroud)
这给了我所需的一切,而不必查看所有的列数据类型,但我想知道是否有一种方法可以自动生成列名这样的东西.所以auto gen会产生:
CustomerID int,
ClientID int,
FirstName varchar(50),
LastName varchar(50)
Run Code Online (Sandbox Code Playgroud)
这将允许我将其复制并粘贴到我的create table语句中.
这可能会给你一个开始:
DECLARE @viewname VARCHAR(50);
SET @viewname ='tableorviewname';
SELECT c.name + ' '+ t.name +
case t.name
WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
ELSE ','
end
FROM sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE object_id = (SELECT object_id from sys.objects where name = @viewname)
ORDER BY c.column_id
Run Code Online (Sandbox Code Playgroud)
编辑:TEMP TABLES:
临时表略有不同,例如,这在sql 2008中适用于名为#tv_source的临时表
DECLARE @viewortablename VARCHAR(50);
SET @viewortablename ='tempdb..#tv_source';
SELECT c.name + ' '+ t.name +
case t.name
WHEN 'varchar' THEN '('+CAST(c.max_length AS VARCHAR(3) )+'),'
ELSE ','
end
FROM tempdb.sys.columns c
INNER JOIN sys.types AS t ON c.system_type_id = t.system_type_id
WHERE object_id = object_id(@viewortablename)
ORDER BY c.column_id
Run Code Online (Sandbox Code Playgroud)
注意:这给出了逗号分隔列表,但没有尝试删除最后一个逗号,它只提供一个列表,您可能希望将其放在字符串上并进行操作等,然后将其用作动态sql或somthing.不过,它应该让你开始你想做的事情.
注意对于其他人来说,sql 2000不能正确显示长度,例如在varchar(45)上,它只会列出varchar部分,我没有尝试为这个问题重做.