有没有办法将存储过程中发生的print
语句静音,而无需编辑过程?
我使用R中的RODBC运行SQL查询。其他答案已经解决,通常需要SET NOCOUNT ON
才能返回查询结果而不返回任何消息。
我的问题是我的查询运行存储过程,其中包含一些print
语句,SET NOCOUNT ON
不会将它们静音。这意味着我的R脚本在遇到存储过程时会返回character(0)
。
有没有办法只返回结果并将存储的proc print
声明静音?
我的代码类似于:
library(RODBC)
# SQL execution function
execSQL = function(sql){
db=odbcDriverConnect('driver={SQL Server};server=<server>;database=<database>;trusted_connection=true')
on.exit(odbcClose(db))
sqlQuery(db, sql)
}
# SQL Query
sqlfull <- "
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
DECLARE @MYVAR INT
INSERT INTO @MYVAR (SELECT TOP 1 BLAH FROM MYTABLE)
;
CREATE TABLE #TEMP (OUT1 INT, OUT2 FLOAT)
INSERT INTO #TEMP (OUT1, OUT2)
EXEC SP_MYPROC @MYVAR
;
SET NOCOUNT OFF;
SELECT * FROM #TEMP t1
JOIN OTHERTABLE t2 on t1.OUT1 = t2.OUT2"
# Cleanup query
sql <- gsub(pattern = '\n', replacement = " ", x = sqlfull)
# Execute SQL
SQLOutput <- execSQL(sql)
# Returns character(0)
重要的是要注意,在存储的proc添加了print语句之前,这一问题没有问题。此SQL查询在SSMS上运行时没有问题。
答案 0 :(得分:0)
我的SQL存储过程中一直有打印语句。这一直对我有用:
get_table_from_sql = function(sql) {
conn <- RODBC::odbcConnect(dsn = "MYSQLSERVER")
sql_data = RODBC::sqlQuery(conn, sql)
RODBC::odbcClose(conn)
return(sql_data)
}
其中MYSQLSERVER
将由您自己的服务器名称替换。你这样称呼它:
get_table_from_sql("EXEC my_procedure")