我正在使用这个(简化的)代码块从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)
我在看哈希,但我找不到任何关于如何循环哈希的东西.这里做什么是正确的?也许只是使用一个数组,但两个值都用空格分隔?
还是我错过了一些明显的东西?
我一直在网上寻找,但没有找到太多.事实上,大多数信息都出现在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 2005系统,大量重复计算而不是函数,许多存储过程只是非常轻微而不是参数化.还有很多非常相似的SSIS包.
展望未来,我希望能够发现这种"代码味".这方面有很多工具,但我没有找到任何SQL的东西.
有关使用产品的任何想法,或在TSQL中应用复制/粘贴代码的最佳实践?
非常感谢...
编辑:感谢您的所有反馈.我和其中几个人一起玩了一下,但看起来最简单易用的那个似乎是Atomiq.我必须将所有对象导出到.sql文件,然后必须使用批处理文件将扩展名为.sql的所有文件重命名为.cs,因为它不使用.sql.但是,我已经获得了有关代码主要问题的一些很好的信息.
我目前正在通过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.
这是一个不错的选择吗?任何代码示例指针?
我正在使用SQL Server 2008 R2版本的数据库图表工具.尽可能搜索,我似乎找不到在UI中重命名表的方法.这真的不可能吗?重命名列很容易,但我能够"重命名"表的唯一方法是使用新名称重新创建它,创建适当的外键关系,然后删除旧表.
谢谢,西尔维娅
我正在尝试编写一个非常轻量级的"构建"脚本,它基本上只能从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选项,以便它可以做任何事情.如果没有强制,它甚至不会从服务器中检索我在本地删除的文件,这肯定在变更集中.
谢谢,西尔维娅
我希望这是直截了当的,我做错了.我在网上看到一些关于"变异自杀"看起来不错的东西,但它是旧版本而且我在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) 这很疯狂,但在我的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) 我是一个DB2新手,所以我甚至不知道从哪里开始寻找.我们有很棒的DB2管理员,但现在他们已经遇到了其他问题,所以我正在尝试对开发数据库进行一些故障排除.
我的情况是我有一个表空间给我这个错误信息
无法在表空间"[MyTableSpace]"中分配新页面.
但是,我所做的只是运行多个(数百个)DDL语句,主要是创建表,还有索引和pk脚本.因此,考虑到表空间大约有250毫克,我不应该用完空间,对吧?
这是另一件事 - 似乎在我离开我的脚本一段时间后,某些东西"重置"并且工作了一段时间,然后我开始再次出现表空间问题.但是,可能还有其他事情正在发生.
谢谢,西尔维娅
这似乎应该很容易......无论如何,它在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的值,我可能需要在同一个存储过程中多次设置它.
我在使用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)