我想问你是否可以在SQL Server中声明一个提供列名的常量?
意味着这样的事情:
declare @column varchar(30)
set @column = 'Column1'
SELECT @column FROM Table1
我知道上面的声明是错误的,但也许是为自己提供列名的解决方案。
我希望显示Column1
的结果,但如果Column1
位于''内,则会返回(No column name)
个附加列名称,所有行的结果将为Column1
谢谢
答案 0 :(得分:2)
您无法在SQL中使用动态列名。
为此,您需要使用动态SQL。我建议阅读Erland Sommarskog的The Curse and Blessings of Dynamic SQL来全面了解这个问题 - 这篇文章很长但很全面。
使用动态SQL可能会将您暴露给SQL injection,因此请小心使用。
答案 1 :(得分:1)
为此,您需要使用动态查询,如果您使用slq服务器,可以使用sp_execute执行
DECLARE @SQLString nvarchar(1000)
declare @column varchar(30)
set @column = 'Column1'
SET @SQLString = 'SELECT ' + @column + ' in Table1 '
EXECUTE sp_executesql @SQLString
答案 2 :(得分:0)
总之,不,你不能那样做。你需要使用动态sql。
答案 3 :(得分:0)
使用dynamic SQL。
代码将是这样的:
DECLARE @sqlCommand nvarchar(1000)
DECLARE @column varchar(75)
SET @column = 'Column1'
SET @sqlCommand = 'SELECT ' + @column + ' from Table1'
EXECUTE sp_executesql @sqlCommand, N'@column nvarchar(75)', @column = @column
有关sp_executesql的更多信息,请检查THIS。
与@Oded一样,使用此类解决方案可以进行SQL注入!
答案 4 :(得分:0)
declare @query varchar(100)
set @query = 'select Column1 from table1'
exec (@query)
答案 5 :(得分:0)
正如您所说,上述声明不正确。但是您可以将整个查询存储为动态sql并使用Exec()
运行它。
对于你的情况,它将是:
declare @column varchar(30)
set @column = 'Column1'
declare @sqlSelect varchar(500)
set @sqlSelect = 'SELECT ' + @column + ' in Table1'
Exec( @sqlSelect )