Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL server中动态提及列名_Sql_Sql Server - Fatal编程技术网

在SQL server中动态提及列名

在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语句的一部分来编写,而是希望动态地填充它

比如说,我想选择表Mytable中以单词“后续”开头的所有列。我可以选择以下列

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