我有一个要求,其中我必须创建由表的所有列组成的哈希值。有了Checksum
这个很容易做到,但Checksum
不推荐,因为每微软:
如果表达式列表中的至少一个值发生变化,则列表校验和可能会发生变化。但是,这并不能保证。因此,要检测值是否已更改,我们建议仅在您的应用程序可以容忍偶尔遗漏更改时才使用 CHECKSUM。否则,请考虑改用 HashBytes。使用指定的 MD5 哈希算法,与 CHECKSUM 相比,对于两个不同的输入,HashBytes 返回相同结果的概率要低得多。
HASHBYTES
只接受 2 个参数(算法类型,列)
现在的问题是即使HASHBYTES
与校验和相比更可靠,但似乎没有一种简单的方法可以在多列上创建它。
校验和中的一个例子,
create table dbo.chksum_demo1
(
id int not null,
name varchar(25),
address varchar(250),
HashValue as Checksum (id,name,address)
CONSTRAINT PK_chksum_demo1 PRIMARY KEY (Id)
)
Run Code Online (Sandbox Code Playgroud)
我们如何使用Hashbytes
而不是校验和来完成上述操作?
我正在使用 PowerShell 版本 5,并且正在 PowerShell 脚本中执行几个 SQL 命令。与 SQL Server 不同的是,我们在BEGIN TRANSACTION和COMMIT TRANSACTION中执行命令,这样如果单个命令失败,所有内容都会回滚,我想在我的 Powershell 脚本中实现类似的事情。
因此,在我的场景中,我有 3 个 SQL 命令,如果有任何命令失败,则不应删除该表:
在插入记录时,我尝试使用数组插入多行并测试范围的工作,因此我故意添加重复的 Id 值,因此预期结果是如果 Id 即第一个数组元素有效,则继续处理下一个元素,但如果第二个数组元素无效,然后回滚更改。
但由于我对 Powershell 的了解有限,所以不确定如何实现这一点,因此即使 Id 不重复或不重复,会话也不会被提交。
以下是到目前为止我的脚本:
$connString = "Data Source=<Server-Name>;Database=<DB-Name>;User ID=<Login>;Password=<Pass>"
$conn = New-Object System.Data.SqlClient.SqlConnection $connString
$arr_values = @('1','1')
$tbl_name = "dbo.test1"
$conn.Open()
try
{
if($conn.State -eq "Open")
{
foreach ($Id in $arr_values)
{
$scope = New-Object -TypeName System.Transactions.TransactionScope
$Drop_Command= "DROP Table IF EXISTS $tbl_name"
Invoke-Sqlcmd …
Run Code Online (Sandbox Code Playgroud) 我正在对一个 MYSQL 表执行选择查询,该表有 16,213,156 行和 10 列。但是在建立连接后,代码只执行几分钟,然后抛出错误:线程“Thread-3”中的异常 java.lang.OutOfMemoryError: Java heap space
我的系统配置是 16 GB RAM,Java 8
我尝试将 Jvm 参数设置为 -Xms4G & -Xmx12G 。还尝试设置 stmt.setFetchSize(); // 到 10,100,1000 仍然是同样的错误
我们可以使用 JDBC API 获取如此大量的记录吗?我错过了什么吗?任何帮助将非常感激。
package com;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import com.opencsv.CSVWriter;
public class Test1 {
private static Connection conn = null;
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
connection();
retrieve(conn);
}
public static …
Run Code Online (Sandbox Code Playgroud) 我有这个存储过程;我正在 SSMS 中打印变量的值。相反,我想将此结果存储在一个.txt
文件中。
注意:我不想使用右键单击结果然后将结果另存为的 SSMS 选项来执行此操作。我希望直接在存储过程本身中使用任何 SQL 代码/内置函数来完成它。
CREATE PROCEDURE [dbo].[usp_printresulttofile]
AS
BEGIN
DECLARE @var NVARCHAR(MAX) = ''
SET @var = 'print this data in txt file'
PRINT 'Data is : ' + @var
/* SQL query here to store result of Print statement in text file */
END
EXEC [dbo].[usp_printresulttofile]
Run Code Online (Sandbox Code Playgroud)
在这里分享更新的工作 SP,以便它可能对有类似要求的人有用 谢谢@David Browne - Microsoft
ALTER PROCEDURE [dbo].[usp_printresulttofile]
AS
BEGIN
DECLARE @fileTimeStamp varchar(200) = convert(varchar,getDate(), 112 )+'_'+ Replace(convert(varchar,getDate(), 114 ),':','') -- select convert(varchar, getdate(), 121)
DECLARE …
Run Code Online (Sandbox Code Playgroud) 我是批处理编码的新手。所以在基础知识上很挣扎。我想连接两个变量,然后在第三个变量中打印其连接结果。
批号
@echo off
SET basePath = C:\Users\Documents\
echo basePath - %basePath%
SET fileName = T_test
echo fileName - %fileName%
SET extension= .csv
echo extension - %extension%
SET finalvalue = %basePath%%fileName%%extension%
echo finalvalue - %finalvalue%
pause
Run Code Online (Sandbox Code Playgroud)
实际产量
basePath -
fileName -
extension - .csv
finalvalue -
Run Code Online (Sandbox Code Playgroud)
预期输出
basePath - C:\Users\Documents\
fileName - T_test
extension - .csv
finalvalue - C:\Users\Documents\T_test.csv
Run Code Online (Sandbox Code Playgroud)
*****更新******
由于 fileName 变量具有多个用逗号分隔的值。我想一一迭代
Batch Code
@echo off
SET basePath=C:\Users\Documents\
echo basePath - %basePath%
SET fileName=T_test,T_test2,T_test3
echo fileName - %fileName%
SET …
Run Code Online (Sandbox Code Playgroud)