将动态sql查询的计数结果转换为INT
我试图在查询返回的值表名称中搜索,以检查是否有记录,并且该记录中的某些值为空。如果是,那么我想将表的名称插入到临时表中。我得到一个错误:将动态sql查询的计数结果转换为INT,sql,sql-server,Sql,Sql Server,我试图在查询返回的值表名称中搜索,以检查是否有记录,并且该记录中的某些值为空。如果是,那么我想将表的名称插入到临时表中。我得到一个错误: Conversion failed when converting the varchar value 'count(*) FROM step_inusd_20130618 WHERE jobDateClosed IS NULL' to data type int. 以下是查询: DECLARE @table_name VARCHAR(150)
Conversion failed when converting the varchar value 'count(*)
FROM step_inusd_20130618 WHERE jobDateClosed IS NULL' to data type int.
以下是查询:
DECLARE @table_name VARCHAR(150)
DECLARE @sql VARCHAR(1000)
DECLARE @test int
SELECT @table_name = tableName FROM #temp WHERE id = @count
SET @sql = 'SELECT * FROM ' + @table_name + ' WHERE jobDateClosed IS NULL'
--ERROR is below:
select @test = 'count(*) FROM ' + @table_name + ' WHERE jobDateClosed IS NULL'
--PRINT @sql
-- EXEC(@sql)
IF @test > 0
BEGIN
INSERT INTO #temp2 (tablename) VALUES ( @table_name);
END
SET @count = @count + 1
您知道如何将计数结果转换为整数吗?检查您可以在哪里定义输出参数
DECLARE @table_name VARCHAR(150)
DECLARE @sql VARCHAR(1000)
DECLARE @test int
SELECT @table_name = tableName FROM #temp WHERE id = @count
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
SET @SQLString = N'SELECT @test = count(*) FROM ' + @table_name + ' WHERE jobDateClosed IS NULL'
SET @ParmDefinition = N'@test int OUTPUT';
EXECUTE sp_executesql @SQLString, @ParmDefinition, @test=@test OUTPUT;
IF @test > 0
BEGIN
INSERT INTO #temp2 (tablename) VALUES ( @table_name);
END
SET @count = @count + 1
不应该设置而不是选择 例如,改变:
select @test = 'count(*) FROM ' + @table_name + ' WHERE jobDateClosed IS NULL'
用于:
正如我所看到的,您的问题是,$test变量是INT,您试图为它分配文本值'count…' 使用类似以下的方法:
从uid=1的mytable中,将somevalue选择到myvar中 我删掉了不需要的东西来展示如何做到这一点,所以这里是:
DECLARE @table_name VARCHAR(150)
DECLARE @CountStatement NVARCHAR(1000)
DECLARE @test int
SELECT @table_name = tableName FROM #temp WHERE id = @count
SET @CountStatement = 'select @test = count(*) FROM ' + @table_name + ' WHERE jobDateClosed IS NULL'
EXECUTE sp_executesql @CountStatement, N'@test INT OUTPUT', @test OUTPUT;
SELECT @test
DECLARE @table_name VARCHAR(150)
DECLARE @CountStatement NVARCHAR(1000)
DECLARE @test int
SELECT @table_name = tableName FROM #temp WHERE id = @count
SET @CountStatement = 'select @test = count(*) FROM ' + @table_name + ' WHERE jobDateClosed IS NULL'
EXECUTE sp_executesql @CountStatement, N'@test INT OUTPUT', @test OUTPUT;
SELECT @test