如何在不使用 Create Table 语句的情况下在 2 列中插入 2 个值并在其余列中保留空值

How To Insert 2 Values in 2 columns and rest null values in rest columns without using Create Table Statement

请检查此 示例 Sql fiddle:http://www.sqlfiddle.com/#!3/f59ae.

我只需要这样 output.first 2 列 应该包含可以是任何值的值 其余列应包含 Hello 值,而不考虑 Create Table statement.

我想编写一个查询,将 2 个值插入 2 列,并将 Hello 插入所有其他列。

假设我有 100 列然后我想将 1020 值插入到 col1col2 以及 Hello 到所有其他 98列。

同样,如果我有 200 列,那么我希望将 1020 值插入到 col1col2 以及 Hello 中198 列。

我写了一个查询,但我认为这是一个基本查询,所以我不在这里写。所以反对者请考虑一下。

如何写这个查询???

如果所有其他列都设置为 Nullable,那么在您的 Insert 语句中您可以编写语句 By 而无需考虑您的 Nullable 字段。

假设您的 Table 名为 Student 的属性是:

Student ::

Name,
RollNo,
OptionalField_1,
OptionalField_2,
OptionalField_3

其中具有 OptionalField 的列是 Nullble 字段。

在这种情况下,您可以将查询简单地写为 ::

INSERT INTO Student (Name,RollNo) VALUES ('MyName',12);

所以这将创建一个具有两个列值的 ENtry,并且所有列值都为 Nullable。

为了更好地理解您可以参考:: http://www.w3schools.com/sql/sql_insert.asp

您可以将其用于您的查询:

create table mytable(
                col1 varchar not null, 
                col2 varchar not null,
                col3 varchar not null default 'Hello',
                col4 varchar not null default 'Hello',
                col5 varchar not null default 'Hello',
                so on...... );
insert into mytable(col1,col2) values('10','20');

您只需将 Default constraint 添加到您不想插入值 explicitly 的列即可。我希望@Manish Pant 的回答能帮助你做到这一点。

根据您的评论,您希望仅通过使用查询来执行此操作。所以你需要使用Dynamic sql来做到这一点。

简单演示

架构

CREATE TABLE [dbo].[Test](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [Country] [varchar](100) NULL,
    [State] [varchar](100) NULL,
    [City] [varchar](100) NULL,
    [Population (in Millions)] [varchar](100) NULL
) 

声明一个变量来保存 Dynamic sql

DECLARE @cl_val NVARCHAR(max)='Insert into Test('

sys.columns 视图中提取所有列并过滤标识列

SELECT @cl_val += Quotename(NAME) + ','
FROM   sys.columns
WHERE  Object_name(object_id) = 'Test'
       AND is_identity <> 1
ORDER  BY NAME

SELECT @cl_val = LEFT(@cl_val, Len(@cl_val)-1) + ') values (' -- Remove the trailing comma

此处仅将值添加到 case statement 中的 column,您在 else 部分明确传递值添加 default value

SELECT @cl_val += CASE 
                   WHEN NAME ='City' THEN '''A''' 
                   WHEN NAME='country' THEN '''c''' 
                   ELSE '''Hello''' 
                  END + ','
FROM   sys.columns
WHERE  Object_name(object_id) = 'Test'
       AND is_identity <> 1
ORDER  BY NAME

SELECT @cl_val = LEFT(@cl_val, Len(@cl_val)-1) + ')' -- Remove the trailing comma

--PRINT @cl_val 
EXEC Sp_executesql @cl_val 

select * from test

结果

id  Country State   City    Population (in Millions)
--  ------- -----   ----    ------------------------
1   c       Hello   A       Hello