SQL Server:靠近'的语法不正确@';
我已经在网上搜索了一整天,但我不知道搜索解决方案的关键字是什么,所以我来到这里 下面是我的示例SQL查询的一部分:SQL Server:靠近'的语法不正确@';,sql,sql-server,Sql,Sql Server,我已经在网上搜索了一整天,但我不知道搜索解决方案的关键字是什么,所以我来到这里 下面是我的示例SQL查询的一部分: DECLARE @column_name varchar(50) SET @column_name = 'test' SELECT t1.@column_name, t2.@column_name FROM table_test AS t1 INNER JOIN table_test2 AS t2 ON t2.id = t1.id 运行此
DECLARE @column_name varchar(50)
SET @column_name = 'test'
SELECT
t1.@column_name,
t2.@column_name
FROM
table_test AS t1
INNER JOIN
table_test2 AS t2 ON t2.id = t1.id
运行此查询时,出现以下错误:
“@column_name”附近的语法不正确
靠近t1.@column\u name
和t2.@column\u name
如何解决此错误?我一直在尝试用括号括起来,但仍然不起作用。您需要使用动态SQL来实现这一点。这将使用
sys
对象,因为避免SQL注入非常重要
DECLARE @column_name varchar(50)
SET @column_name = 'test'
DECLARE @SQL nvarchar(MAX);
SELECT @SQL = N'
SELECT t1.' + QUOTENAME(c.[name])
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.[name] = 'table_test'
AND c.[name] = @column_name;
SELECT @SQL = @SQL + N'
t2.'+ QUOTENAME(c.[name])
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.[name] = 'table_test2'
AND c.[name] = @column_name;
SELECT @SQL = @SQL + N'
FROM table_test t1
JOIN Tabletest_2 t2 ON t1.id = t2.id;';
PRINT @SQL;
--EXEC sp_executesql @SQL; --Uncomment to run the SQL
如果您不理解这些,请询问。您不能参数化数据库中的事物名称。您必须使用字符串来生成正确的SQL。如果SQL Server希望您为它命名,那么您将为它命名一个字符串(包含在变量中)。这些都是不一样的东西。那么有没有其他方法可以让事情顺利进行呢?我对SQL非常陌生,这就是为什么。如果您需要以这种方式动态定义列名,那么您可能有一个数据库模型issue@Nick.McDermaid因为我实际上是使用游标从信息模式表中获取列名的。所以它是以这种格式返回的。我就是这样想的,除非你有更好的解决办法:)好吧,试着用你的方法,效果很好。谢谢你明白它在做什么吗?对于动态SQL,避免SQL注入的重要性是巨大的。我很乐意解释一下。只是想告诉您,t1.id=t2.id;'上的行
jointtabletest_2
有一个轻微的代码错误,您忘记将t2分配给Tabletest_2:)如果我错了,请纠正我,基本上您是在将表和列名与sys.table和sys.columns进行比较。基本上,如果有人试图注入任何东西,这段SQL查询将不会运行,因为在从sys.table和columnCorrect进行验证后,它不会返回所需的值。该列必须同时存在于表table_test
和table_test2
中。如果没有,则第一个或第二个SELECT
语句将返回NULL
,导致@SQL
具有值NULL
。因此,sp_executesql
不运行任何操作。:)很高兴看到你能理解。