【发布时间】:2018-05-15 22:18:49
【问题描述】:
我正在尝试从 Power Shell(在我的 windows 7 64 位桌面上)运行 SQL,远程数据库主机是 MS SQL Server 2012。
代码为:
$var1 = 'string';
function Get-ODBC-Data{
param(
[string]$query=$('
SELECT COUNT(*)
FROM [master].[sys].[table_name]
WHERE col2 = ''$var1''
;
'),
[string]$username='db_user_name',
[string]$password='db_password'
)
$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "DRIVER={SQL Server};Server=123.456.78.90;Initial Catalog=master;Uid=$username;Pwd=$password;"
$conn.open()
$cmd = New-object System.Data.Odbc.OdbcCommand($query,$conn)
$ds = New-Object system.Data.DataSet
(New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($ds) | out-null
$conn.close()
$ds.Tables[0]
}
$result = Get-ODBC-Data
Write-Host "SQL_Output: " $result[0];
如果我在 SQL 的 where 子句中使用“字符串”而不是 $var1,那么脚本可以正常工作并给出预期的结果。
问题 但我希望能够将任何字符串作为 $var1 作为参数传递给脚本。然后在 SQL 的 where 子句中使用它。我怎样才能做到这一点?
我尝试了什么 我试图将 $var1 括在 where 子句中的 1,2 或 3 个单引号中,以试图转义单引号。当 $var1 被赋值时,还尝试从“字符串”中添加/删除单引号。我也尝试过 [string]$var1 = 'string' 但这些都不起作用,而且我不断收到主要与 SQL 语法相关的错误。
【问题讨论】:
-
不确定您是否可以在参数默认值中执行此操作。您可能需要一个反引号来转义单引号。您可以使用 + 连接字符串,所以...
$query ='Where col = `'' + $var1 + '`';应该可以工作。为什么不创建查询 Inc 值,然后执行语句。 -
感谢您的回复。使用
$query ='Where col ='' + $var1 + '';给出语法错误:Unexpected token ''' in expression or statement`。我愿意尝试不同的方法。你能给我一些关于在 Inc 中创建查询然后执行语句的想法吗?我不知道。
标签: powershell sql-server-2012