我有什么
我目前正在将当前目录中的所有SQL文件插入临时表中:
create table #tmpSQLFiles(SQLFileName varchar(max))
set @SqlStatement = 'master.dbo.xp_cmdshell ''dir /b "' + @DirPath + '*.sql"'''
insert into #tmpSQLFiles
execute (@SqlStatement)
这很有效。
我想要什么
现在我希望该表有一个额外的varchar
列,我可以在其中存储某个所需的字符串:
create table #tmpSQLFiles(SQLFileName varchar(max), MyString varchar(max))
set @SqlStatement = 'master.dbo.xp_cmdshell ''dir /b "' + @DirPath+ '*.sql"'''
我尝试了什么
我该怎么做插入?我试过了:
insert into #tmpSQLFiles (SQLFileName, MyString) values (execute (@SqlStatement), 'aa')
或:
declare @ExecutedStmt varchar(max)
set @ExecutedStmt = execute (@SqlStatement)
-- But the above line is not correct.
这两个中的任何一个都适合我。我不想在第二列之后插入和更新。
关于如何实现这一目标的任何想法?谢谢!
答案 0 :(得分:2)
尝试使用表变量作为中间人 - 不是最漂亮的,但可以完成工作:
create table #tmpSQLFiles(SQLFileName varchar(max), MyString varchar(max))
set @SqlStatement = 'master.dbo.xp_cmdshell ''dir /b "' + @DirPath + '*.pdf"'''
DECLARE @TempOutpt TABLE ([output] varchar(500))
insert into @TempOutpt ([output])
execute (@SqlStatement)
insert into #tmpSQLFiles (SQLFileName, MyString)
select [output], 'my string here' from @TempOutpt
select * from #tmpSQLFiles
如果您没有使用扩展存储过程(xp_cmdshell
),那么您可能可以使用OPENROWSET
来执行SP:
SELECT *fields*
FROM OPENROWSET('SQLNCLI',
'Server=*your_server*;Trusted_Connection=yes;Database=*your_database*',
'exec *stored_procedure* *parameters*')
答案 1 :(得分:0)
您需要使用输出参数,以便在下一个INSERT中使用结果:
DECLARE @result INT, @sql NVARCHAR(512)
SET @sql = N'SELECT @result = COUNT(*) FROM ' + @dbname + '.INFORMATION_SCHEMA.TABLES'
EXEC sp_executesql
@query = @sql,
@params = N'@result INT OUTPUT',
@result = @result OUTPUT
PRINT @result