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