自动创建包含多列的 SQL table

creating a SQL table with multiple columns automatically

我必须创建一个包含 90 多个字段的 SQL table,其中大多数是位字段,如 N01、N02、N03 ... N89、N90 是否有快速创建方法多个字段或者是否可以让一个字段包含一组值 true/false?我需要一个也可以方便查询的解决方案

没有简单的方法可以做到这一点,并且针对这样的 table 进行查询将非常具有挑战性。创建一个包含三列的 table - 项目编号、位字段编号和值字段。然后您将能够针对 table.

编写 'good' 简洁的 Tsql 查询

至少您可以为位域生成 ALTER TABLE 个脚本,然后 运行 这些脚本。

DECLARE @COUNTER INT = 1
WHILE @COUNTER < 10
BEGIN
    PRINT 'ALTER TABLE table_name ADD N' + RIGHT('00' + CONVERT(NVARCHAR(4), @COUNTER), 2) + ' bit'
    SET @COUNTER += 1
END

TLDR:使用二进制算法。

对于这样的结构

==============
Table_Original
==============
Id | N01| N02 |...

我会推荐一个替代的 table 结构,像这样

==============
Table_Alternate
==============
Id | One_Col

One_Col 属于 varchar 类型,其值将设置为

cast(n01 as nvarchar(1)) + cast(n02 as nvarchar(1))+ cast(n03 as nvarchar(1)) as One_Col

但是我觉得您会使用 C# 或其他一些编程语言将值设置到列中。您还可以使用位和位移位操作。

每当你需要获取一个值时,你可以使用SQL或C#语法(作为字符串处理) 在 sql 查询字词中,您可以使用

之类的查询
SELECT SUBSTRING(one_col,@pos,1) 

@pos可以像

一样设置
DECLARE @Colname nvarchar(4)
SET @colname=N'N32'
 --    ....
SET @pos= CAST(REPLACE(@colname,'N','') as INT)

您也可以在任何编程语言中轻松使用二进制算术。

使用三列。

Table
ID         NUMBER,
FIELD_NAME VARCHAR2(10),
VALUE      NUMBER(1)

例子

ID FIELD        VALUE
1    N01        1
1    N02        0
.
1    N90        1
.
2    N01        0
2    N02        1
.
2    N90        1
.

您还可以对字段名(或字段名)的整个列进行 OR:

select DECODE(SUM(VALUE), 0, 0, 1) from table where field_name = 'N01';

甚至执行 AND

select EXP(SUM(LN(VALUE))) from table where field_name = 'N01';

(see http://viralpatel.net/blogs/row-data-multiplication-in-oracle/)