Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何批量更改#temp_表列的数据类型和maxlength?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 如何批量更改#temp_表列的数据类型和maxlength?

Sql 如何批量更改#temp_表列的数据类型和maxlength?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,考虑以下临时表#tbl select * from tempdb.sys.columns where [object_id] = object_id('tempdb..#tbl') -- results into: object_id name system_type_id max_length collation_name ----------------------------------------------------------------------------

考虑以下临时表
#tbl

select * from tempdb.sys.columns where [object_id] = object_id('tempdb..#tbl')

-- results into:

object_id  name    system_type_id  max_length   collation_name
----------------------------------------------------------------------------
1          fieldA  231             510          SQL_Latin1_General_CP1_CI_AS
2          fieldB  104               1          NULL
3          fieldC  231             400          SQL_Latin1_General_CP1_CI_AS
4          fieldD  231              -1          SQL_Latin1_General_CP1_CI_AS
5          fieldE  104               1          NULL
.
.
n          fieldF  231             450          SQL_Latin1_General_CP1_CI_AS
我在
#tbl
中有许多列,需要大量更改所有列的数据类型、maxlength和排序规则类型,以便最终结果是:

object_id  name    system_type_id  max_length   collation_name
----------------------------------------------------------------------------
1          fieldA  231             510          SQL_Latin1_General_CP1_CI_AS
2          fieldB  231             510          SQL_Latin1_General_CP1_CI_AS
3          fieldC  231             510          SQL_Latin1_General_CP1_CI_AS
4          fieldD  231             510          SQL_Latin1_General_CP1_CI_AS
5          fieldE  231             510          SQL_Latin1_General_CP1_CI_AS
.
.
n          fieldF  231             510          SQL_Latin1_General_CP1_CI_AS
这将允许我将列转换成行(这是我的客户在会议中使用的报告所需要的)

因为每次运行脚本时,
#tbl
中的列数可能会有所不同(并且可能有不同的字段),所以我希望动态地执行此操作—一次完成


有没有办法做到这一点

可以通过两种方式创建临时表:

使用
选择进入

SELECT Col1, COl2
INTO #temp
FROM [YOUR_TABLE]
此方法将根据
[YOUR_TABLE]
定义中的数据类型和大小创建
Col1
Col2
,排序规则将基于数据库服务器的默认值。因此,如果要使用此方法更改其类型/大小,则必须更改基础表定义,或在插入过程中执行一些数据转换:

SELECT CAST(Col1 as nvarchar(max)) as Col1, CAST(Col2 as nvarchar(max)) as Col2
INTO #temp
FROM [YOUR_TABLE]
使用表变量

另一个选项是预先声明一个表变量,这使您可以控制列类型和大小:

DECLARE @TEMP TABLE (Col1 nvarchar(max), Col2 nvarchar(max))

INSERT INTO @TEMP
SELECT Col1, Col2
FROM [YOUR_TABLE]
那么:

ALTER TABLE #tbl ALTER COLUMN fieldA VARCHAR(510) COLLATE SQL_Latin1_General_CP1_CI_AS

只需对每个字段执行一次。

如何创建这些临时表?
选择[stuff]进入#temp from[db_table1]left join[db_table2]