请检查示例Sql小提琴:http://www.sqlfiddle.com/#!3/f59ae。
这样只有我想要output.first 2列应包含可以是任何值的值 和rest列应包含 Hello 值,而不考虑创建表语句。
我想编写一个查询,将2个值插入2列,Hello
插入所有其他列。
假设我有100列,那么我希望将10
和20
值插入到col1
和col2
以及Hello
到所有其他98列中。
同样,如果我有200列,那么我希望10
和20
值插入col1
和col2
以及Hello
到其他198列
我写了一个查询,但我认为这是一个基本的查询,所以我不是在这里写的。所以downvoters请考虑一下。
如何编写此查询???
答案 0 :(得分:1)
您只需将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
此处仅将值添加到column
case statement
中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
<强> 结果 强>
{{1}}
答案 1 :(得分:0)
如果所有其他列都设置为Nullable,那么在Insert语句中,您可以编写语句By而不考虑Nullable字段。
假设您的名为Student的表具有以下属性:
Student ::
Name,
RollNo,
OptionalField_1,
OptionalField_2,
OptionalField_3
其中OptionalField
的列是Nullble字段。
在这种情况下,您可以将查询编写为::
INSERT INTO Student (Name,RollNo) VALUES ('MyName',12);
因此,这将使ENtry具有两个列值&amp;全部都是Nullable。
为了更好的理解,您可以参考:: http://www.w3schools.com/sql/sql_insert.asp
答案 2 :(得分:0)
您可以将此用于查询:
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');