SQL里一个变量是不是可以当做多个值使用?

shuihemi 2020-11-04 10:37:41
请教:我如果想使用变量来缩写以下语句
INSERT INTO [TEST] 
VALUES('2020/5/1','张三',16.5),
('2020/5/1','张三',14.7),
……
('2020/5/1','张三',20.3);

是不是一个变量不能当做多个值来使用啊?
比如(当然下面语句肯定是错误的):
declare @X nvarchar(20)
set @X = '2020/5/1','张三'
INSERT INTO [TEST]
VALUES(@X,16.5),
(@X,14.7),
……
(@X,20.3);

萌新,见笑了,希望能帮忙给出正确的写法,感谢!
...全文
366 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2020-11-05
  • 打赏
  • 举报
回复
这样不行,你设两个变量就ok了
xiaoxiangqing 2020-11-05
  • 打赏
  • 举报
回复
表变量才可以
二月十六 版主 2020-11-05
  • 打赏
  • 举报
回复
可以用拼接语句实现
declare @X nvarchar(20)
set @X = '''2020/5/1'',''张三'''
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO [TEST] VALUES('+@X+',16.5),('+@X+',14.7)';
select @sql
exec(@sql)
吉普赛的歌 版主 2020-11-05
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('test') IS NOT NULL
DROP TABLE test
GO
CREATE TABLE test(
	d DATETIME,
	n NVARCHAR(6),
	v DECIMAL(10,1)	
)
GO
---- 以上为创建测试表 --------

--1. 定义表变量
declare @X TABLE(d DATETIME,n NVARCHAR(6))
--插入到表变量
INSERT INTO @X(d,n)
select '2020/5/1','张三'
--2. 插入到目标表
INSERT INTO [TEST]
SELECT d,n,t.v
FROM @X CROSS APPLY(
	SELECT 16.5 AS v
	UNION ALL
	SELECT 14.7
	UNION ALL
	SELECT 20.3
) AS t

SELECT * FROM test
/*
d                       n      v
----------------------- ------ -------
2020-05-01 00:00:00.000 张三     16.5
2020-05-01 00:00:00.000 张三     14.7
2020-05-01 00:00:00.000 张三     20.3
*/

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧