我试图运行这个查询,因为它在运行时抛出错误,即
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='+ 'Cast('+@OrgID+' as varchar')
为什么会出现这个错误?
INCORRECT SYNTAX NEAR VARCHAR
注意:@TableName
为Varchar(100)
,@OrgID
为int
答案 0 :(得分:8)
您在CAST
的来电中缺少右括号。试试这个:
EXEC('Select Count(*) AS Total from ' + @TableName +
' where fk_Orgs_PropertyDetails_OrgID = Cast(' + @OrgID + ' as varchar)')
正如@Felix指出的那样,如果您的fk_Orgs_PropertyDetails_OrgID
列已经是INT
,那么就无需将@OrgID
投射到VARCHAR
。所以只需使用以下内容:
EXEC('Select Count(*) AS Total from ' + @TableName +
' where fk_Orgs_PropertyDetails_OrgID = ' + @OrgID)
答案 1 :(得分:4)
正如其他人回答的那样,您在)
之后忘了VARCHAR
:
EXEC('Select Count(*) Total
from '+@TableName+'
where fk_Orgs_PropertyDetails_OrgID='+ 'Cast('+@OrgID+' as varchar)');
但是,我建议不要使用EXEC
。相反,您应该使用sp_executesql
。这还有一个好处,即通过阻止SQL Injection来提供更高的安全性。
DECLARE @TableName VARCHAR(100),
@OrgID INT;
DECLARE @sql NVARCHAR(MAX);
SET @sql =
'SELECT COUNT(*) Total
FROM ' + QUOTENAME(@TableName) + '
WHERE fk_Orgs_PropertyDetails_OrgID = @OrgID';
EXEC sp_executesql
@sql,
N'@OrgID INT',
@OrgID
;
以上假设fk_Orgs_PropertyDetails_OrgID
是INT
。
进一步阅读动态SQL:
答案 2 :(得分:2)
在您的查询")"在最后一次CAST失踪。
如果定义了@OrgID,则varchar和fk_Orgs_PropertyDetails_OrgID为int,那么您不需要使用CAST。执行以下
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+'''')
由于
答案 3 :(得分:0)
你缺少结束括号
EXEC('Select Count(*) Total from '+ @TableName + ' where fk_Orgs_PropertyDetails_OrgID=' + 'Cast('+ @OrgID + ' as varchar)')