Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 Server:如何创建具有特定维度n和m的零表?_Sql_Sql Server_Sql Server 2014_Sparse Matrix - Fatal编程技术网

SQL Server:如何创建具有特定维度n和m的零表?

SQL Server:如何创建具有特定维度n和m的零表?,sql,sql-server,sql-server-2014,sparse-matrix,Sql,Sql Server,Sql Server 2014,Sparse Matrix,假设您想要n行和m列。零表是所有值都等于零的表。您想创建一个维度n次m的零表。如何在SQL Server 2014中创建维度为n和m的零表 动态创建0的表: declare @n int = 10; /* rows */ declare @m int = 10; /* columns */ declare @cols nvarchar(max); declare @sql nvarchar(max); select @cols = stuff(( select top (@m) '

假设您想要
n
行和
m
列。零表是所有值都等于零的表。您想创建一个维度
n
m
的零表。如何在SQL Server 2014中创建维度为
n
m
的零表

动态创建0的表:

declare @n int = 10; /* rows */
declare @m int = 10; /* columns */

declare @cols nvarchar(max);
declare @sql  nvarchar(max);

select @cols = stuff((
    select top (@m) ',' + quotename(n) + ' = 0'
    from (
      select n=row_number() over (order by (select 1)) 
      from master..spt_values
      ) t
    order by n
    for xml path (''), type).value('.','nvarchar(max)')
  ,1,1,'');

select @sql = '
select ' + @cols + '
from (
  select top (@n) n=row_number() over (order by (select 1))
  from master..spt_values
  ) t
';

select @sql as CodeGenerated;
exec sp_executesql @sql, N'@n int', @n;
rextester演示:

返回:

+-----------------------------------------------------------------------------------------+
|                                      CodeGenerated                                      |
+-----------------------------------------------------------------------------------------+
| select [1] = 0,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,[7] = 0,[8] = 0,[9] = 0,[10] = 0 |
| from (                                                                                  |
|   select top (@n) n=row_number() over (order by (select 1))                             |
|   from master..spt_values                                                               |
|   ) t                                                                                   |
+-----------------------------------------------------------------------------------------+
exec sp_executesql
返回:

+---+---+---+---+---+---+---+---+---+----+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
+---+---+---+---+---+---+---+---+---+----+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
+---+---+---+---+---+---+---+---+---+----+

动态创建0的表:

declare @n int = 10; /* rows */
declare @m int = 10; /* columns */

declare @cols nvarchar(max);
declare @sql  nvarchar(max);

select @cols = stuff((
    select top (@m) ',' + quotename(n) + ' = 0'
    from (
      select n=row_number() over (order by (select 1)) 
      from master..spt_values
      ) t
    order by n
    for xml path (''), type).value('.','nvarchar(max)')
  ,1,1,'');

select @sql = '
select ' + @cols + '
from (
  select top (@n) n=row_number() over (order by (select 1))
  from master..spt_values
  ) t
';

select @sql as CodeGenerated;
exec sp_executesql @sql, N'@n int', @n;
rextester演示:

返回:

+-----------------------------------------------------------------------------------------+
|                                      CodeGenerated                                      |
+-----------------------------------------------------------------------------------------+
| select [1] = 0,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,[7] = 0,[8] = 0,[9] = 0,[10] = 0 |
| from (                                                                                  |
|   select top (@n) n=row_number() over (order by (select 1))                             |
|   from master..spt_values                                                               |
|   ) t                                                                                   |
+-----------------------------------------------------------------------------------------+
exec sp_executesql
返回:

+---+---+---+---+---+---+---+---+---+----+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
+---+---+---+---+---+---+---+---+---+----+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  0 |
+---+---+---+---+---+---+---+---+---+----+

我们可以创建默认值为0的表,如@SQLZim所述,并使用默认值创建插入脚本。如下

 create table #test ([1] int default 0, [2] int default 0)

 insert into #test ([1],[2]) default values 

我们可以创建默认值为0的表,如@SQLZim所述,并使用默认值创建插入脚本。如下

 create table #test ([1] int default 0, [2] int default 0)

 insert into #test ([1],[2]) default values 

解释什么是“零表”…@marc_的零表是一个所有值都等于零的表。给我们展示一个该表的示例。字段名是什么?为什么需要这个?SQL Server是适合此工作的工具吗?这与您前面的问题有关吗?解释什么是“零表”…@marc_的零表是一个所有值都等于零的表。给我们展示一个该表的示例。字段名是什么?为什么需要这个?SQL Server是适合此工作的工具吗?这与您前面的问题有关吗?这实际上非常酷:因此在SQL Server Management Studio中,我可以使用数据导入,例如导入稀疏csv文件,使用高级选项卡创建默认0?这实际上非常酷:因此在SQL Server Management Studio中,我可以使用数据导入,例如导入稀疏csv文件,使用高级选项卡创建默认0?