有没有人可以提供一个使用golang sqlserver驱动程序的查询或QueryRow (而不是QueryContext)的工作示例,其中包含一个简单的select和2个(或更多)位置参数?
显然,这里有一些变化:https://github.com/denisenkom/go-mssqldb/issues/260
给出的唯一示例代码是针对QueryContext的,这对于一个简单的cli数据转换程序来说是非常复杂的。这对于postgres或mysql来说是非常简单的,但是对于sql server我却束手无策。
使用:
var checkQuery = "select SigCode from @LRU where LRUEmu=@ENVVAR"
...
rows, err := db.Query(checkQuery, sql.Named("LRU", string1), sql.Named("ENVVAR", string2))
收益率:
application() rows.Query() failed:mssql: Must declare the table variable "@LRU".
编辑。根据下面的@Flimzy,使用QueryContext重试:
rows, err := db.QueryContext(context.TODO(), checkQuery,sql.Named("LRU", string1), sql.Named("ENVVAR", string2))
同样的错误。
@MWillemse:下面是一些示例代码(pymssql),它使用一个变量来指定目标表:
slice_cursor.execute(
"select distinct Subsystem, Field from [%(dlog)s] "
"where Subsystem not like 'STRING1' "
"order by Subsystem, Field"
% {
'dlog' : datelog
}
)
我一直在这么做。在golang/pg中,它的效果也很不错。
@putu:我试过你的建议,但没有什么乐趣。然而,新的错误...
var checkQuery = "DECLARE @LRU VARCHAR(255), @ENVVAR VARCHAR(255); select SigCode from @LRU where LRUEmu=@ENVVAR;"
// ...
rows, err := db.Query(checkQuery, sql.Named("LRU", string1), sql.Named("ENVVAR", string2))
收益率:
mssql: The variable name '@LRU' has already been declared. Variable names must be unique within a query batch or stored procedure.
发布于 2017-08-03 06:58:22
我不知道golang,但我知道sql server。
var checkQuery = "select SigCode from @LRU where LRUEmu=@ENVVAR"
rows, err := db.Query(checkQuery, sql.Named("LRU", string1), sql.Named("ENVVAR", string2))
必须将这些行转换为SQL代码并发送到SQL服务器。生成的SQL代码可能如下所示:
DECLARE @LRU NVARCHAR(MAX) = '<contents of string 1>';
DECLARE @ENVAR NVARCHAR(MAX) = '<contents of string 2>';
select SigCode from @LRU where LRUEmu=@ENVVAR
执行此操作时,SQL Server将引发错误
Must declare the table variable "@LRU"
它被你的QueryContext捕获并重新抛出。
SQL server引发此错误的原因是查询中存在语法错误。SQL server不允许( afaik和其他rdbms也不允许)允许您将表名放入变量中并对其运行select。
所以你要么这么做:
var checkQuery = "select SigCode from " + string1 + " where LRUEmu=@ENVVAR"
rows, err := db.Query(checkQuery, sql.Named("ENVVAR", string2))
或者像这样使用动态sql:
var checkQuery =
"DECLARE @SQL NVARCHAR(MAX) =
'select SigCode from '+@LRU+' where LRUEmu=@ENVVAR';
EXEC(@SQL);"
rows, err := db.Query(checkQuery, sql.Named("LRU", string1), sql.Named("ENVVAR", string2))
https://stackoverflow.com/questions/45445205
复制相似问题