Sql server 将While与SELECT statement一起使用
我的目标是创建多个包含空单元格的列 基本上,这只需要定义一定数量的列:Sql server 将While与SELECT statement一起使用,sql-server,Sql Server,我的目标是创建多个包含空单元格的列 基本上,这只需要定义一定数量的列: SELECT NOM_EMP,PRENOM_EMP, '' as [1], '' as [2] FROM EMPLOYE 我试过这个,但不起作用: DECLARE @I AS INT SET @I = 10 SELECT ROW_NUMBER() OVER (ORDER BY NOM_EMP) as 'Number', NOM_EMP, Prenom_EMP, WHILE @I < 10
SELECT NOM_EMP,PRENOM_EMP, '' as [1], '' as [2]
FROM EMPLOYE
我试过这个,但不起作用:
DECLARE @I AS INT
SET @I = 10
SELECT
ROW_NUMBER() OVER (ORDER BY NOM_EMP) as 'Number', NOM_EMP, Prenom_EMP,
WHILE @I < 10
BEGIN
SELECT '' AS
END
FROM EMPLOYE
这有可能实现吗
预期结果:假设我在循环中使用了8
一种方法是使用动态SQL,使用XML路径构建列列表:
在SQL Server 2017及更高版本中,您可以使用替换。SQL Server在设计上是声明性的,不支持宏替换 这就留下了动态SQL 范例 生成的SQL
你的伪代码不清楚。将预期结果添加到您的问题中。@DanGuzman doneIt成功了,我很感激。我可以将其放入存储过程或函数中调用吗?@Zkai很乐意提供帮助。仅在存储过程中。函数不接受动态SQL抱歉,我没有看到您的答案。你比我快了一分钟。
DECLARE
@SQL nvarchar(MAX)
, @i int = 10;
WITH
t10 AS (SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t(n))
,t1000 AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS i FROM t10 AS a CROSS JOIN t10 AS b CROSS JOIN t10 AS c)
SELECT @SQL = 'SELECT NOM_EMP,PRENOM_EMP,' +
STUFF((SELECT ','''' AS ' + QUOTENAME(CAST(i AS nvarchar(4)))
FROM t1000
WHERE i < @i
FOR XML PATH(''), TYPE).value('.','nvarchar(MAX)'),1,1,'')
+ N' from EMPLOYE';
EXECUTE sp_executesql @SQL;
Declare @Int int = 8
Declare @SQL varchar(max) = '
Select NOM_EMP,PRENOM_EMP,'
+ (Select Stuff((Select ',[' +cast(N as varchar(25))+']='''''
From (Select Top (@Int) N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1) A
For XML Path ('')),1,1,'')
)
+ ' From Employee'
Exec(@SQL)
Select NOM_EMP,PRENOM_EMP,[1]='',[2]='',[3]='',[4]='',[5]='',[6]='',[7]='',[8]=''
From Employee