下面我们来用两个实例来表示他们的差异:
--创建表CREATE TABLE userinfo( userid INT IDENTITY(1,1) PRIMARY KEY, --用户ID username NVARCHAR(50) NOT NULL --用户姓名)GO --插入测试数据INSERT INTO userinfo(username) VALUES('张三')INSERT INTO userinfo(username) VALUES('李四')INSERT INTO userinfo(username) VALUES('王五')
下面通过分别通过exec和sp_executesql方法来实现动态加载sql脚本,来看看他们差异
--查询标号为2的用户信息DECLARE @strSql NVARCHAR(MAX) DECLARE@userID NVARCHAR(10)SET @userID='2'SET @strSql=N'select from userinfo where userid='''+@userID+''''EXEC(@strSql)
sp_executesql方法
--查询标号为2的用户信息DECLARE @strSql NVARCHAR(MAX) DECLARE@userID NVARCHAR(10) SET @userID='2'SET @strSql='select from userinfo where userid=@userID'EXEC sys.sp_executesql @strSql,N'@userID NVARCHAR(10)',@userID
通过上面两段代码我们随意马虎创造,利用exec方法查询带参数语句须要对参数进行字符串拼接,而sp_executesql方法可以支持参数的输入和输出。个人建议没有分外的情形,只管即便用系统自带的sp_executesql方法来动态加载sql脚本。
