今天接到的需求是把所有表的创建写到储存过程里面。
收到创建表的脚本之后就傻了,60-70个表,还包含存储过程、视图等。
那么如何解决呢。
思路就是在存储过程里面使用shell脚本执行sql脚本文件。
通过MSDN得到执行shell的函数:xp_cmdshell。
下面是完整的脚本:
CREATE PROCEDURE CreatTable ( @UserName varchar ( 200 ), @PassWord varchar ( 200 ), @FilePath varchar ( 200 ), @Trusted bit ) AS BEGIN SET NOCOUNT ON ; declare @shell varchar ( max ); EXEC sys.sp_configure ' show advanced options ' , 1 ; -- Open shell EXEC sys.sp_configure ' xp_cmdshell ' , 1 if @Trusted = 1 Set @shell = ' osql -E Northwind -i ' + @FilePath ; else -- use user name connection Set @shell = ' osql -U ' + @UserName + ' -P ' + @PassWord + ' -d Northwind -i ' + @FilePath ; EXEC master..xp_cmdshell @shell ; -- Close shell EXEC sys.sp_configure ' xp_cmdshell ' , 0 END GO