我在sql中使用字符串查询并使用Execute方法执行它。我必须添加一个默认值的附加列。该默认值包含在变量中。当我在查询字符串中添加该默认值列并执行它时,我收到一个错误"无效的列名' dafaultValue' &#34 ;. 还有其他解决办法吗? 这是我的代码:
Declare @variable Varchar(Max);
Declare @variableQuery Varchar(Max);
set @variable = 'Test';
set @variableQuery = 'select '+@variable+' as dest ,* from myTable ';
execute (@variableQuery);
答案 0 :(得分:0)
您的问题是您需要将变量包含在单引号中:
set @variableQuery = 'select '+ ''''+@variable+'''' +' as dest ,* from myTable';
否则它认为它是表中的列名,它不是,因此是错误。
答案 1 :(得分:0)
我强烈建议您学会使用sp_executesql
并传入参数。这比查询字符串更安全:
Declare @variable Varchar(Max);
Declare @variableQuery Varchar(Max);
set @variable = 'Test';
set @variableQuery = 'select @variable as dest, t.* from myTable t';
exec sp_executesql @variableQuery,
N'@variable varchar(max)',
@variable = @variable;
此方法还允许您从查询中传回值,因此对于处理查询,它比exec
更强大。
查询变量通常被声明为nvarchar()
,只是为了尽可能通用。