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