例如:
declare @tname varchar(64)
................
delete from dl.dbo.表名 where UpLoad_Is=0
declare @tname varchar(64)
................
exec (delete from dl.dbo.+@tname + where UpLoad_Is=0)
declare @table_name varchar(20)
declare @sql varchar(800)
set @table_name=d1.dbo.表名
set @sql = delete from + @table_name + where UpLoad_Is=0
exec(@sql)
exec (delete dl..+@tname + where UpLoad_Is=0)
运行时生成语句
在调用数据库 API 函数或方法执行 SQL 语句前,大多数 Microsoft® SQL Server™ 应用程序必须在运行时动态生成这些语句。例如,使用 ODBC 的 C 语言应用程序动态地将一个或多个 SQL 语句生成到字符数组中,然后将此数组传递给 ODBC SQLPrepare 或 SQLExecDirect 函数。
Transact-SQL 支持使用以下两种方法在运行时生成 Transact-SQL 脚本、存储过程和触发器中的 SQL 语句:
使用 sp_executesql 系统存储过程执行 Unicode 字符串。sp_executesql 支持与 RAISERROR 语句相似的参数替换。
使用 EXECUTE 语句执行字符串。EXECUTE 语句不支持在执行的字符串中的参数替换。
下面是使用 sp_executesql 执行动态生成包含 SQL 语句的字符串的简单示例:
USE Northwind
DECLARE @SQLString NVARCHAR(500)
/* Set column list. CHAR(13) is a carriage return, line feed.*/
SET @SQLString = NSELECT FirstName, LastName, Title + CHAR(13)
/* Set FROM clause with carriage return, line feed. */
SET @SQLString = @SQLString + NFROM Employees + CHAR(13)
/* Set WHERE clause. */
SET @SQLString = @SQLString + NWHERE LastName LIKE D%
EXEC sp_executesql @SQLString