小编Vik*_*s J的帖子

如何在 SQL Server 中为多列使用 HASHBYTES 函数

我有一个要求,其中我必须创建由表的所有列组成的哈希值。有了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而不是校验和来完成上述操作?

sql-server

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

PowerShell - 如果所有 Invoke-SQL 命令均成功,如何提交范围

我正在使用 PowerShell 版本 5,并且正在 PowerShell 脚本中执行几个 SQL 命令。与 SQL Server 不同的是,我们在BEGIN TRANSACTIONCOMMIT 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)

sql-server powershell powershell-5.0

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

Java 如何在结果集中检索超过 100 万行

我正在对一个 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)

java jdbc

5
推荐指数
1
解决办法
8427
查看次数

如何将 SQL Server 存储过程的输出存储在 .txt 文件中

我有这个存储过程;我正在 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)

sql-server

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

如何在 Windows 上的批处理脚本中附加/连接变量

我是批处理编码的新手。所以在基础知识上很挣扎。我想连接两个变量,然后在第三个变量中打印其连接结果。

批号

@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)

batch-file command-prompt

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