我已经在网上看了一会儿,发现了许多类似的问题,但由于某种原因,我似乎无法让这个工作.
我只是想连接到SQL服务器数据库并将查询结果输出到文件 - 请参阅下面的PowerShell脚本.我不确定的是如何将用户ID和密码集成到连接字符串中.
$SQLServer = "aaaa.database.windows.net"
$SQLDBName = "Database"
$uid ="john"
$pwd = "pwd123"
$SqlQuery = "SELECT * from table;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0] | out-file "C:\Scripts\xxxx.csv"
Run Code Online (Sandbox Code Playgroud)
收到以下错误消息:
使用"1"参数调用"Fill"的异常:"此版本的SQL Server不支持Windows登录."
我似乎被困在这个问题上,环顾四周找不到解决方案。
我有一个 SQL 表,第一行看起来像这样:
Name Val1 Val2 Val3
John 1000 2000 3000
Run Code Online (Sandbox Code Playgroud)
我需要做的是选择该行中的最大值,即3000
显然,如果这些值位于列而不是行中,您可以使用它SELECT MAX(column) FROM table来获取列中的最大值。是否有与此等效的方法来查找一行中的最大值?
我还查看了PIVOT和的用法UNPIVOT,但我认为它们对我没有用。
我能够做到这一点的唯一方法是创建一个临时表并将每个值插入到单个列中,如下所示:
CREATE TABLE #temp (colvals float)
INSERT INTO #temp (colvals)
SELECT Val1 FROM table WHERE ID=1
UNION
SELECT Val2 FROM table WHERE ID=1
UNION
SELECT Val3 FROM table WHERE ID=1
--------------------------------------------
SELECT MAX(colvals) FROM #temp
--------------------------------------------
DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)
然而,我觉得这相当慢,特别是因为我的表的列比上面显示的片段多得多。
有任何想法吗?
提前致谢。
我有一个名为 test.csv ($testCSV) 的 CSV 文件。此文件中有许多列,但我只想选择前 10 列并将这 10 列放入另一个 CSV 文件中。请注意,我没有任何列标题,因此无法根据列名选择列。
以下代码行将获取文件的前 10 行:
$first10Rows = Get-Content $testCSV | select -First 10
Run Code Online (Sandbox Code Playgroud)
但是,我需要前 10 个 COLUMNS 的所有数据,并且我正在努力寻找解决方案。
我还查看了拆分文件并尝试按如下方式返回第一列:
$split = ( Get-Content $testCSV) -split ','
$FirstColumn = $split[0]
Run Code Online (Sandbox Code Playgroud)
我曾希望 $split[0] 会返回整个第一列,但它只返回文件中的第一个字段。
非常感谢解决此问题的任何帮助。
提前致谢。
******更新******
我正在使用 vonPryz 在下面回答的方法来解决这个问题,即:
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b
Run Code Online (Sandbox Code Playgroud)
但是,我现在还尝试通过添加以下额外代码来仅在 b 列不为空的情况下导入 CSV 文件:
Import-Csv -Delimiter "," -Header @("a","b","c") -Path $testCSV | Select a,b | where b -notmatch $null
Run Code Online (Sandbox Code Playgroud)
我需要这样做来加速脚本,因为有数万行 b …
由于某种原因,我正在努力获得这个答案。
我有两个表,table1 和 table2,它们看起来像这样:
表格1:
ID Location Warehouse
1 London Narnia
2 Cyprus Metro
3 Norway Neck
4 Paris Triumph
Run Code Online (Sandbox Code Playgroud)
表2:
ID Area Code
1 London Narnia
2 Cyprus Metro
3 Norway Triumph
4 Paris Neck
Run Code Online (Sandbox Code Playgroud)
我需要首先从 table1 中选择所有内容,其中table1.Location位于table2.Area AND table1.Warehouse中table2.Code GIVEN THAT table1.Location is in table2.Area. 即我想要:
ID Location Warehouse
1 London Narnia
2 Cyprus Metro
Run Code Online (Sandbox Code Playgroud)
我必须:
select
1.location
, 1.warehouse
from table1 1
where 1.location in (select area from table2)
and 1.warehouse …Run Code Online (Sandbox Code Playgroud) 我有一个CSV文件,看起来像这样:
Column1,Column2,Column3
John,Smith,"AA, AH, CA, NI, PB"
Reginald,Higginsworth,"AA, AH, CA, NI, PB, SN, ZS"
Run Code Online (Sandbox Code Playgroud)
您会注意到其中有多个值Column3(括在引号中).我需要做的是在CSV中为每个值生成一行数据Column3,即文件需要看起来像:
Column1,Column2,Column3
John,Smith,AA
John,Smith,AH
John,Smith,CA
John,Smith,NI
John,Smith,PB
Reginald,Higginsworth,AA
Reginald,Higginsworth,AH
Reginald,Higginsworth,CA
Reginald,Higginsworth,NI
Reginald,Higginsworth,PB
Reginald,Higginsworth,SN
Reginald,Higginsworth,ZS
Run Code Online (Sandbox Code Playgroud)
我在这方面已经进行了多次尝试,似乎无法做到正确.
powershell ×3
csv ×2
sql ×2
join ×1
max ×1
split ×1
sql-server ×1
ssms ×1
where-clause ×1
where-in ×1