在SQL server中动态提及列名
我想选择表中的某些列。但是,我不想将它们作为select语句的一部分来编写,而是希望动态地填充它 比如说,我想选择表Mytable中以单词“后续”开头的所有列。我可以选择以下列在SQL server中动态提及列名,sql,sql-server,Sql,Sql Server,我想选择表中的某些列。但是,我不想将它们作为select语句的一部分来编写,而是希望动态地填充它 比如说,我想选择表Mytable中以单词“后续”开头的所有列。我可以选择以下列 select name from sys.columns where object_id=OBJECT_ID('Mytable') and name like 'Subsequent%' 我在想,把它作为子查询提出来,如下所示是可行的,但我没能让它起作用 select top 100 (select name from
select name from sys.columns where object_id=OBJECT_ID('Mytable') and name like 'Subsequent%'
我在想,把它作为子查询提出来,如下所示是可行的,但我没能让它起作用
select top 100 (select name from sys.columns where object_id=OBJECT_ID('Mytable') and name like 'Subsequent%') from Mytable
您需要使用动态sql将列注入语句的select列表中。这是一种方法:
declare @Table SYSNAME;
declare @cols nvarchar(max);
declare @sql nvarchar(max);
SET @Table = N'TableName';
select @cols = stuff(
(select ',' + quotename(name)
from sys.columns
where object_id=object_id(@Table)
and name like 'Subsequent%'
for xml path(''), type)
.value('.', 'nvarchar(max)'),1,1,'')
set @sql = N'select ' + @cols + N' from '+ QUOTENAME(@Table)
exec sp_executesql @sql
您需要使用动态sql将列注入语句的select列表中。这是一种方法:
declare @Table SYSNAME;
declare @cols nvarchar(max);
declare @sql nvarchar(max);
SET @Table = N'TableName';
select @cols = stuff(
(select ',' + quotename(name)
from sys.columns
where object_id=object_id(@Table)
and name like 'Subsequent%'
for xml path(''), type)
.value('.', 'nvarchar(max)'),1,1,'')
set @sql = N'select ' + @cols + N' from '+ QUOTENAME(@Table)
exec sp_executesql @sql
您需要使用动态sql将列注入语句的select列表中。这是一种方法:
declare @Table SYSNAME;
declare @cols nvarchar(max);
declare @sql nvarchar(max);
SET @Table = N'TableName';
select @cols = stuff(
(select ',' + quotename(name)
from sys.columns
where object_id=object_id(@Table)
and name like 'Subsequent%'
for xml path(''), type)
.value('.', 'nvarchar(max)'),1,1,'')
set @sql = N'select ' + @cols + N' from '+ QUOTENAME(@Table)
exec sp_executesql @sql
您需要使用动态sql将列注入语句的select列表中。这是一种方法:
declare @Table SYSNAME;
declare @cols nvarchar(max);
declare @sql nvarchar(max);
SET @Table = N'TableName';
select @cols = stuff(
(select ',' + quotename(name)
from sys.columns
where object_id=object_id(@Table)
and name like 'Subsequent%'
for xml path(''), type)
.value('.', 'nvarchar(max)'),1,1,'')
set @sql = N'select ' + @cols + N' from '+ QUOTENAME(@Table)
exec sp_executesql @sql
使用内置SP SP_executesql。您必须为此使用动态sql。同意。不行。如果必须,请将动态SQL与sp_executesql一起使用。请使用内置的sp_executesql。您必须为此使用动态SQL。同意。不行。如果必须,请将动态SQL与sp_executesql一起使用。请使用内置的sp_executesql。您必须为此使用动态SQL。同意。不行。如果必须,请将动态SQL与sp_executesql一起使用。请使用内置的sp_executesql。您必须为此使用动态SQL。同意。不行。如果必须的话,请将动态SQL与sp_executesql一起使用。看起来我已经复制粘贴了您的答案,但请相信我,我没有:)@M.Ali不这么认为:)您将表作为变量处理,这比我的硬编码解决方案更聪明。@jpw对不起,我是新手。当使用上面的命令时,我只得到“Commands completed successfully”,我看不到任何输出。@IAMTubby这不要紧;我尝试使用表和视图,但没有出现任何问题。@IAMTUBY尝试在结尾的语句中将
+QUOTENAME(@table)
更改为+@table
,它应该可以与schemaname.ObjectName一起使用。我似乎已经复制粘贴了您的答案,但是请相信我,我没有:)@M.Ali不这么认为:)您将表作为变量处理,这比我的硬编码解决方案更聪明。@jpw对不起,我是新手。当使用上面的命令时,我只得到“Commands completed successfully”,我看不到任何输出。@IAMTubby这不要紧;我尝试使用表和视图,但没有出现任何问题。@IAMTUBY尝试在结尾的语句中将+QUOTENAME(@table)
更改为+@table
,它应该可以与schemaname.ObjectName一起使用。我似乎已经复制粘贴了您的答案,但是请相信我,我没有:)@M.Ali不这么认为:)您将表作为变量处理,这比我的硬编码解决方案更聪明。@jpw对不起,我是新手。当使用上面的命令时,我只得到“Commands completed successfully”,我看不到任何输出。@IAMTubby这不要紧;我尝试使用表和视图,但没有出现任何问题。@IAMTUBY尝试在结尾的语句中将+QUOTENAME(@table)
更改为+@table
,它应该可以与schemaname.ObjectName一起使用。我似乎已经复制粘贴了您的答案,但是请相信我,我没有:)@M.Ali不这么认为:)您将表作为变量处理,这比我的硬编码解决方案更聪明。@jpw对不起,我是新手。当使用上面的命令时,我只得到“Commands completed successfully”,我看不到任何输出。@IAMTubby这不要紧;我尝试使用表和视图时没有出现任何问题。@IAMTUBY尝试在结尾的语句中将+QUOTENAME(@table)
更改为+@table
,它应该可以使用schemaname.objectname