Sql server 为什么我的查询抛出不正确的语法错误?
我试图运行这个查询,因为它在运行时抛出错误,即Sql server 为什么我的查询抛出不正确的语法错误?,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我试图运行这个查询,因为它在运行时抛出错误,即 EXEC('Select Count(*) Total from '+@TableName+' where fk_Orgs_PropertyDetails_OrgID='+ 'Cast('+@OrgID+' as varchar') 为什么我会犯这样的错误 INCORRECT SYNTAX NEAR VARCHAR 注意:@TableName是Varchar(100),@OrgID是int调用CAST时缺少右括号
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='+ 'Cast('+@OrgID+' as varchar')
为什么我会犯这样的错误
INCORRECT SYNTAX NEAR VARCHAR
注意:
@TableName
是Varchar(100)
,@OrgID
是int
调用CAST
时缺少右括号。试试这个:
EXEC('Select Count(*) AS Total from ' + @TableName +
' where fk_Orgs_PropertyDetails_OrgID = Cast(' + @OrgID + ' as varchar)')
正如@Felix指出的,如果您的fk\u Orgs\u PropertyDetails\u OrgID
列已经是INT
,那么就没有必要将@OrgID
强制转换为VARCHAR
。因此,只需使用以下方法:
EXEC('Select Count(*) AS Total from ' + @TableName +
' where fk_Orgs_PropertyDetails_OrgID = ' + @OrgID)
在您的查询中,在最后的CAST中缺少“)”
如果@OrgID定义为varchar,而fk_Orgs_PropertyDetails_OrgID为int,则不需要使用强制转换。执行下列命令
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='+@OrgID)
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='''+@OrgID+'''')
如果列fk_Orgs_PropertyDetails_OrgID为varchar类型。执行下列命令
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='+@OrgID)
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='''+@OrgID+'''')
谢谢您缺少结束括号
EXEC('Select Count(*) Total from '+ @TableName + ' where fk_Orgs_PropertyDetails_OrgID=' + 'Cast('+ @OrgID + ' as varchar)')
正如其他人所回答的,您在
VARCHAR
之后忘记了)
:
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='+ 'Cast('+@OrgID+' as varchar)');
但是,我建议不要使用EXEC
。相反,你应该使用。这还有一个额外的好处,即通过防止冲突来提供更多的安全性
以上假设fk\u Orgs\u PropertyDetails\u OrgID
是一个INT
进一步阅读动态SQL:
- 埃尔兰·索马斯科格
- 亚伦·伯特兰
fk\u Orgs\u PropertyDetails\u OrgID
是int
?如果是这样,为什么要强制转换到varchar?我会添加一个建议,使用sp\u executesql
来代替。如果fk\u Orgs\u propertydeails\u OrgID
已经是INT
了,那么为什么不直接使用fk\u Orgs\u propertydeails\u OrgID=@OrgID
并用它来完成呢?@TimBiegeleisen你是什么意思?这正是我在sp_executesql
解决方案中所做的。是的,但在这种情况下,对EXEC
的原始调用也应该起作用,对吧?@TimBiegeleisen它仍然起不到作用,因为您正在将字符串(查询)与int(值@OrgID
)连接起来。@TimBiegeleisen我可能错了。SQL Server可能会隐式转换该变量。此查询正在运行:DECLARE@id INT=1;EXEC('SELECT*FROM(value(1)、(2))t(Id),其中Id='+@Id)代码>