gpt4 book ai didi

sql-server - 将 nvarchar 值转换为 int 时转换失败

转载 作者:行者123 更新时间:2023-12-03 12:57:10 26 4
gpt4 key购买 nike

声明 @count nvarchar(max)

set @count ='select COUNT(*) from '+ @tablename+''

if( @count =0 )
begin
print 'fail'
end
else
begin
print 'success'
end
end

@count 变量没有得到值 0。它显示错误为

将 nvarchar 值 'select COUNT(*) from tablename' 转换为数据类型 int 时转换失败。

最佳答案

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 注入(inject)敞开了大门。因此,请确保 @tablename 已清理。

通过在尝试动态查询之前使用参数化查询确保表存在,一项安全检查将是这样的:
DECLARE @Count INTEGER
DECLARE @nSQL NVARCHAR(1000)
SET @nSQL = 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=@TableName)
SELECT @Count = COUNT(*) FROM ' + @tablename + '
ELSE
SELECT @Count = -1'

EXECUTE sp_executesql @nSQL, N'@TableName NVARCHAR(128), @Count INTEGER OUT', @TableName, @Count OUT

如果@Count 然后出现在-1,你知道这是因为表名无效

编辑:
对 sp_executesql 的引用是 here

关于sql-server - 将 nvarchar 值转换为 int 时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2146276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com