转换失败到int
问题描述:
申报@count为nvarchar(最大)转换失败到int
set @count ='select COUNT(*) from '+ @tablename+''
if(@count =0)
begin
print 'fail'
end
else
begin
print 'success'
end
end
的@count变量是没有得到的值为0。它示出了误差作为
转换转换时失败nvarchar值'从tablename'选择COUNT(*)为数据类型int。
答
这应该w^ork:
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @count int
SET @SQLString = N'SELECT @CountOUT = COUNT(*) FROM ' + @tablename;
SET @ParmDefinition = N'@CountOUT int OUTPUT';
EXECUTE sp_executesql @SQLString, @ParmDefinition, @[email protected] OUTPUT;
SELECT @count;
答
尝试宣告@count
为int
:
DECLARE @count AS INT
SELECT @count = COUNT(*) FROM YourTable
的问题是,如果你做
SELECT @countAsString = 'SELECT ...'
然后@countAsString(是一个字符串)将不会保留查询的结果,但字符串本身。
使用EXEC
实际执行动态创建的查询。
+0
雅我已经尝试过,同样的问题,我得到 转换失败时,将varchar值转换为数据类型int – Innova 2010-01-27 11:09:43
答
DECLARE @Count INTEGER
DECLARE @nSQL NVARCHAR(1000)
SET @nSQL = 'SELECT @Count = COUNT(*) FROM ' + @tablename
EXECUTE sp_executesql @nSQL, N'@Count INTEGER OUT', @Count OUT
-- Now check @Count
像这样的动态sql要格外小心,因为你打开自己的SQL注入。所以请确保@tablename已被清理。
一张支票是安全的就会是这样的,通过确保在尝试动态查询之前使用参数化查询表中存在:在-1
DECLARE @Count INTEGER
DECLARE @nSQL NVARCHAR(1000)
SET @nSQL = 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE [email protected])
SELECT @Count = COUNT(*) FROM ' + @tablename + '
ELSE
SELECT @Count = -1'
EXECUTE sp_executesql @nSQL, N'@TableName NVARCHAR(128), @Count INTEGER OUT', @TableName, @Count OUT
如果@count然后出来,你就知道这是因为tablename是无效
编辑:
参考sp_executesql的是here
这不起作用,因为@ COUNT是varchar,其值为“SELECT COUNT(*)FROM xxxx”,它不是有效数字:)。按照答案中的描述使用动态SQL。 – 2010-01-27 12:10:41