小编Syl*_*via的帖子

通过散列循环,或在PowerShell中使用数组?

我正在使用这个(简化的)代码块从SQL Server中使用bcp提取一组表.

$OutputDirectory = "c:\junk\"
$ServerOption =   "-SServerName"
$TargetDatabase = "Content.dbo."

$ExtractTables = @(
    "Page"
    , "ChecklistItemCategory"
    , "ChecklistItem"
)

for ($i=0; $i -le $ExtractTables.Length – 1; $i++)  {
    $InputFullTableName = "$TargetDatabase$($ExtractTables[$i])"
    $OutputFullFileName = "$OutputDirectory$($ExtractTables[$i])"
    bcp $InputFullTableName out $OutputFullFileName -T -c $ServerOption
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但现在有些表需要通过视图提取,有些则不需要.所以我需要一个像这样的数据结构:

"Page"                      "vExtractPage"
, "ChecklistItemCategory"   "ChecklistItemCategory"
, "ChecklistItem"           "vExtractChecklistItem"
Run Code Online (Sandbox Code Playgroud)

我在看哈希,但我找不到任何关于如何循环哈希的东西.这里做什么是正确的?也许只是使用一个数组,但两个值都用空格分隔?

还是我错过了一些明显的东西?

powershell

86
推荐指数
6
解决办法
17万
查看次数

如何在从SQL Server 2008 R2作业调用的PowerShell步骤中显示错误?

我一直在网上寻找,但没有找到太多.事实上,大多数信息都出现在stackoverflow上 - 显示通过CMD提示执行Powershell脚本的SQL 2005作业失败,如果PS脚本失败但是SQL Server 2005 失败了,我希望2008年有所改进.

无论如何,如果Powershell脚本失败,我希望能够使SQL Server代理作业失败.在SQL Server中,我使用的是PowerShell步骤,只需:

write-output "this is a test error"
exit -1
Run Code Online (Sandbox Code Playgroud)

我认为这会导致SQL Server作业出错,但它没有发生,它显示成功.是否有必要使用cmdexec步骤,然后shell to powershell,以便能够在它们发生时获得错误?

谢谢,西尔维娅

sql-server powershell

10
推荐指数
3
解决办法
1万
查看次数

用于检测TSQL中的复制/粘贴代码的工具?

我正在使用大量复制粘贴代码的SQL Server 2005系统,大量重复计算而不是函数,许多存储过程只是非常轻微而不是参数化.还有很多非常相似的SSIS包.

展望未来,我希望能够发现这种"代码味".这方面有很多工具,但我没有找到任何SQL的东西.

有关使用产品的任何想法,或在TSQL中应用复制/粘贴代码的最佳实践?

非常感谢...

编辑:感谢您的所有反馈.我和其中几个人一起玩了一下,但看起来最简单易用的那个似乎是Atomiq.我必须将所有对象导出到.sql文件,然后必须使用批处理文件将扩展名为.sql的所有文件重命名为.cs,因为它不使用.sql.但是,我已经获得了有关代码主要问题的一些很好的信息.

sql t-sql sql-server

9
推荐指数
1
解决办法
220
查看次数

PowerShell相当于curl HTTP POST进行文件传输

我目前正在通过HTTP帖子上传文件,调用方式如下:

curl --verbose --data-binary @C:\Projects\TestUploadFiles\TestFile1.csv "http://client.abc.com/submit?username=UserX&password=PasswordHere&app=test1&replacejob=TestNewJob&startjob=n"
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我实际上每天要上传大约3000个文件 - 我目录中的每个文件.我正在考虑写出一个包含多个cURL命令的批处理文件,每个文件一个.但这会给我带来为每个文件打开和关闭一次连接的开销,对吧?

所以,我正在考虑PowerShell.我不熟悉它,但我相信我可能会为此目的使用WebRequest.

这是一个不错的选择吗?任何代码示例指针?

.net powershell curl

9
推荐指数
1
解决办法
1万
查看次数

在SQL Server 2008 R2中 - 您可以在数据库图表工具中重命名表吗?

我正在使用SQL Server 2008 R2版本的数据库图表工具.尽可能搜索,我似乎找不到在UI中重命名表的方法.这真的不可能吗?重命名列很容易,但我能够"重命名"表的唯一方法是使用新名称重新创建它,创建适当的外键关系,然后删除旧表.

谢谢,西尔维娅

sql database database-design sql-server-2008

8
推荐指数
2
解决办法
1万
查看次数

Team Foundation Server - TF获取变更集编号

我正在尝试编写一个非常轻量级的"构建"脚本,它基本上只能从TF获取一些文件(基于Changeset编号).然后我将在SQLCMD中运行这些文件.

我正在使用这个:

tf.exe get c:\tfs\  /version:c2681  /force /recursive
Run Code Online (Sandbox Code Playgroud)

但是,这似乎得到了一切,而不仅仅是变更集#2681中的文件.我希望能够将它指向我的tfs工作区的根,给它一个变更集编号,并让它只更新那些少数特定文件.此外,它似乎是越来越旧的版本(也许是在更改集#2681签入时的当前版本)?

有没有办法获得那些特定的文件,而不需要在tf get itemspec中专门调用它们?

编辑:我实际上必须添加/ force选项,以便它可以做任何事情.如果没有强制,它甚至不会从服务器中检索我在本地删除的文件,这肯定在变更集中.

谢谢,西尔维娅

tfs

6
推荐指数
1
解决办法
9466
查看次数

为什么我的Perl子例程不能在调用它的foreach循环中看到变量的值?

我希望这是直截了当的,我做错了.我在网上看到一些关于"变异自杀"看起来不错的东西,但它是旧版本而且我在5.10.1.

无论如何 - 我声明的变量 - $ RootDirectory - 只是突然失去了价值,我无法弄清楚原因.

这是一个重现问题的脚本.当我在调试模式(perl -d)中运行脚本时,我可以在第21行和第26行打印出$ RootDirectory.但它已经过了第30行.

use strict;
my $RootDirectory; 
my @RootDirectories; 

@RootDirectories = (
   'c:\\P4\\EDW\\PRODEDW\\EDWDM\\main\\db\\'
   ,'c:\\P4\\EDW\\PRODEDW\\EDWADS\\main\\db\\'
   ,'c:\\P4\\EDW\\PRODEDW\\FJE\\main\\db\\'
   );

foreach $RootDirectory (@RootDirectories) { 
   # $RootDirectory = 'c:\\P4\\EDW\\PRODEDW\\EDWDM\\main\\db\\';
   # print ' In foreach ' . $RootDirectory. "\n";
   RunSchema ();
} 

exit(0);

sub RunSchema() { 
   # print ' In RunSchema ' . $RootDirectory. "\n";
   CreateTables ();
} 

sub CreateTables() { 
   # print ' In CreateTables ' . $RootDirectory. "\n";
   SQLExecFolder ('tbl');
} 

sub SQLExecFolder() { 
   print …
Run Code Online (Sandbox Code Playgroud)

perl foreach scoping

5
推荐指数
3
解决办法
5242
查看次数

SQL Server 2008 - 为什么性能WORSE与xml索引?

这很疯狂,但在我的xml字段中添加主XML索引后,查询性能大约是50%WORSE.

这就是我正在做的事情.

  • 我有一个包含XML字段ActivityStepLog的表(包含LogData,XML)

  • 我通过运行以下内容生成要插入此表的示例数据

    INSERT INTO dbo.ActivityStepLog(
    LogGUID
    ,LogContextID
    ,LogTypeID
    ,LogSourceName
    ,LogContent
    ,LogDate
    ,CreateDate
    ,CreatedBy
    )
    选择
    LogGUID = newid()
    ,LogContextID = newid()
    ,LogTypeID = 2
    ,LogSourceName ='test test test'
    ,LogContent =( SELECT top 1*FROM ## SampleData SampleData1其中DecisionLogID = SampleData.DecisionLogID FOR XML AUTO,ELEMENTS,ROOT('BusinessRule'))
    ,LogDate = current_timestamp
    ,CreateDate = current_timestamp
    ,CreatedBy ='test create by'from
    ## SampleData SampleData

SampleData有100,000行,我循环运行5次,最后得到500,000行.

  • LogContent字段最终将具有以下数据:

    -2147483643 0569281A-D1A3-49E3-9E68-BCAC62E2C1C3 1016 2 0 -2147483495 1 2009-05-18T11:47:00 none

(对不起,不确定这是否格式正确 - 它基本上只是一小部分元素).

然后我只是运行一个非常简单的SQL -

SELECT *
FROM ActivityStepLog
WHERE LogContent.value('(/BusinessRuleDecisionLog/SampleData1/DecisionLogID)[1]', 'int') = …
Run Code Online (Sandbox Code Playgroud)

xml sql-server-2008

4
推荐指数
1
解决办法
3117
查看次数

无法在表空间"XXXX"中分配新页面...但它只有250兆,我只运行DDL

我是一个DB2新手,所以我甚至不知道从哪里开始寻找.我们有很棒的DB2管理员,但现在他们已经遇到了其他问题,所以我正在尝试对开发数据库进行一些故障排除.

我的情况是我有一个表空间给我这个错误信息

无法在表空间"[MyTableSpace]"中分配新页面.

但是,我所做的只是运行多个(数百个)DDL语句,主要是创建表,还有索引和pk脚本.因此,考虑到表空间大约有250毫克,我不应该用完空间,对吧?

这是另一件事 - 似乎在我离开我的脚本一段时间后,某些东西"重置"并且工作了一段时间,然后我开始再次出现表空间问题.但是,可能还有其他事情正在发生.

谢谢,西尔维娅

db2

3
推荐指数
1
解决办法
8156
查看次数

如何从DB2中的存储过程中获取变量值?

这似乎应该很容易......无论如何,它在MS SQL Server中

在DB2存储过程中,如何获取变量的值?说我有以下存储过程:

CREATE PROCEDURE etl.TestABC( 
) 
LANGUAGE SQL 
  BEGIN 
    declare      Stmt              varchar(2048); 
    set Stmt = 'this is a test';
-- print Stmt;
-- select Stmt;


    return 0; 
END @ 
Run Code Online (Sandbox Code Playgroud)

我想在设置之后打印出Stmt的值.打印不起作用,选择不起作用.有人说我必须先将它插入表中,然后在运行存储过程后获取它.这真的有必要吗?

谢谢,西尔维亚

编辑:我应该更清楚,我想在每次设置后看到Stmt的值,我可能需要在同一个存储过程中多次设置它.

db2

2
推荐指数
1
解决办法
3万
查看次数

使用Powershell从SQL Server 2008获取数据

我在使用SQL Server中的简单存储过程获取数据时遇到了一些困难.我有一个Powershell脚本需要从3列填充变量(该过程只返回1行)

这就是我所拥有的不起作用的东西.不知怎的,我没有正确引用列值.我尝试了各种方法,但通常会收到错误"无法索引到空数组".我不想遍历结果集,我只想直接从返回变量的一行中设置一些值

$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection
$conn.ConnectionString = `
  "Server=ServerName;Database=ShopDB;Integrated Security=True"
$sqlQuery = new-object System.Collections.Specialized.StringCollection
$sqlQuery.Add("JobSettingsGet")
$Resultset = $conn.ExecuteWithResults($sqlQuery)

# $UserName = $table.Rows(0).Columns(0) 
  # error - Method invocation failed because [System.Data.DataTable] doesn't 
  # contain a method named 'Rows'.
# $UserName = $table.Rows[0].Columns[0] 
  # error - cannot index null array
# $UserName = $table.Row(0).Column(0) 
  # error - Cannot index into a null array,  also Method invocation failed 
  # because [System.Data.DataTable] doesn't contain a method named 'Row'.
# $UserName = $table.Rows[0].Columns[1].Value …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell

2
推荐指数
1
解决办法
1万
查看次数