GVKun编程网logo

mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享(sql将null替换成空串)

1

本文的目的是介绍mssqlsqlserver将字段null(空值)值替换为指定值的三种方法分享的详细情况,特别关注sql将null替换成空串的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,

本文的目的是介绍mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享的详细情况,特别关注sql将null替换成空串的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享的机会,同时也不会遗漏关于Django 连接 mssql (SqlServer)、go mssql 查询语句到实体中 ,goland 简单连接 sqlserver,并查询数据到实体中、lnmp 环境里安装 mssql 及 mssql 的 php 扩展、Logstash sqlserver JDBC:AdapterNotFound: 无法加载 jdbc/mssql 适配器: 适配器类未在 ADAPTER_MAP> 中注册的知识。

本文目录一览:

mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享(sql将null替换成空串)

mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享(sql将null替换成空串)

原文: mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享

摘要:

下文将分享三种将字段中null值替换为指定值的方法分享,如下所示:
实验环境:sqlserver 2008 R2

create table test(keyId int identity,info varchar(30))
   go
   insert into test(info)values(a),(b),(null),(d)
   go 
   ---方法1:使用isnull替换
   select keyId,isnull(info,替换null值)  as info from test 
   go 
   ---方法2:使用case when 替换
   select keyId,case  when info is null then 替换null值 else info  end as info  from test 
  ---方法3:使用coalesce替换相应的值
    select keyId,coalesce(info,替换null值) as info from test 
  
   go 
   truncate table test 
   drop table test 

原文地址:http://www.maomao365.com/?p=6965

Django 连接 mssql (SqlServer)

Django 连接 mssql (SqlServer)

Django 连接 mssql (SqlServer)

 

方法一:

1、需要安装 pymssql

  pip install pymssql

2、使用方法:

复制代码
import pymssql

conn=pymssql.connect(host=''127.0.0.1'',user=''user'',password=''password'',database=''MyDB'')
cur=conn.cursor()
cur.execute(''select * from table1'')
#如果是插入、删除、更新语句切记要写提交命令con.commit() print (cur.fetchall()) cur.close() conn.close()
复制代码

 

方法二:

1、安装必要的组件:

  pip install django-sqlserver django-pytds pyodbc django-pyodbc pypiwin32  

2、修改 settings.py 的 DATABASES:

复制代码
DATABASES = {
    # ''default'': {
    #     ''ENGINE'': ''django.db.backends.sqlite3'',
    #     ''NAME'': os.path.join(BASE_DIR, ''db.sqlite3''),
    # }
    ''default'': {
        ''ENGINE'': ''sqlserver'',
        ''NAME'': ''MyDB'',
        ''HOST'': ''127.0.0.1'',
        ''PORT'': ''1433'',
        ''USER'': ''user'',
        ''PASSWORD'': ''password,
        ''OPTIONS'': {
            ''DRIVER'': ''SQL Server Native Client 10.0'',
        },
    }
}
复制代码

 

方法三:

1、需要安装 SQL Server Management Studio 或者 manually install Microsoft Data Access Components (MDAC) 程序。

2、安装 django-mssql 和 pywin32:

  pip install django-mssql

3、修改 settings.py 的 DATABASES:

复制代码
DATABASES = {
    # ''default'': {
    #     ''ENGINE'': ''django.db.backends.sqlite3'',
    #     ''NAME'': os.path.join(BASE_DIR, ''db.sqlite3''),
    # }

       ''default'': {
        ''NAME'': ''MyDB'',
        ''ENGINE'': ''sqlserver_ado'',
        ''HOST'': ''127.0.0.1'',
        ''USER'': ''user'',
        ''PASSWORD'': ''password'',
        ''OPTIONS'': {
            ''provider'': ''SQLOLEDB'', # Have also tried ''SQLCLI11'' and ''SQLOLEDB''
            ''extra_params'': ''DataTypeCompatibility=80''
        },
    }
}
复制代码

provider 为''SQLCLI10'' 时若有问题,可改成''SQLOLEDB'' ,反之亦然。

 

 方法四:

1、安装 django-pyodbc-azure 和 pyodbc

pip install django-pyodbc-azure pyodbc

2、修改 settings.py 的 DATABASES:

复制代码
DATABASES = {
    ''default'': {
         ''ENGINE'': ''sql_server.pyodbc'',
         ''NAME'': ''MyDB'',
         ''USER'': ''user'',
         ''PASSWORD'': ''password'',
         ''HOST'': ''127.0.0.1'',
         ''PORT'': '''',
          ''OPTIONS'': {
              ''driver'':''SQL Server Native Client 11.0'',
              ''MARS_Connection'': True,

         },
     },
}

# set this to False if you want to turn off pyodbc''s connection pooling
DATABASE_CONNECTION_POOLING = False
复制代码

 

 
 

go mssql 查询语句到实体中 ,goland 简单连接 sqlserver,并查询数据到实体中

go mssql 查询语句到实体中 ,goland 简单连接 sqlserver,并查询数据到实体中

go mssql 查询语句到实体中 ,

goland 简单连接 sqlserver,并查询数据到实体中

需要引用包:github.com/denisenkom/go-mssqldb

我们使用 cmd 执行:

go get github.com/denisenkom/go-mssqldb

在这里插入图片描述

上代码(简单例子):学习记录

/*
* copyright(C),2019-2020, email: 952651117@qq.com
* Author:  dao
* Version: 1.0.0
* Date:    2021/6/10 8:40
* Description:
*
 */

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/denisenkom/go-mssqldb"
	"log"
)

type man struct {
	Id         int
	Name       string
	IsGraduate bool
}

func main() {
	//编写连接字符串
	connString := "server=120.79.19.125;port1433;database=cuyan;user id=cuyan;password=123456"
	//建立数据库连接:conn
	conn, err := sql.Open("mssql", connString)
	if err != nil {
		log.Fatal("Open Connection Failed:", err.Error())
	}
	defer conn.Close()
	//编写查询语句
	stmt, err := conn.Prepare(`select Name from [Student]`)
	if err != nil {
		log.Fatal("Prepare Failed:", err.Error())
	}
	defer stmt.Close()

	//执行查询语句
	rows, err := stmt.Query()
	if err != nil {
		log.Fatal("Query Failed:", err.Error())
	}
	//将数据读取到实体中
	var rowsData []*man
	for rows.Next() {
		row := new(man)
		//其中一个字段的信息 , 如果要获取更多,就在后面增加:rows.Scan(&row.Name,&row.Id)
		rows.Scan(&row.Name)
		rowsData = append(rowsData, row)
	}
	for _, v := range rowsData {
		//循环输出读取的数据
		fmt.Println(v.Name)
	}
}

执行后如下图:

在这里插入图片描述

lnmp 环境里安装 mssql 及 mssql 的 php 扩展

lnmp 环境里安装 mssql 及 mssql 的 php 扩展

小活中用到 mssql, 于是在自己 lnmp 环境中安装各 mssql 数据库

步骤如下: 

源码编译安装

(1)下载 freetds-stable-0.91 源码: http://download.csdn.net/download/xhu_eternalcc/7457555(花了 4 积分,没有积分的找我要,微信 zmd1047773569)
          上传到根目录下的 download 文件中
(2)编译安装:
   # cd /download

           # tar zxvf freetds-stable.tgz(解压,)

 

   # cd freetds-0.91

   # 编译

            # ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib

            # make

            # make install

            参数解释:

            安装 freetds 到目录 /usr/local/freetds:--prefix=/usr/local/freetds

            支持 MSSQL2000:--with-tdsver=8.0 --enable-msdblib

 

配置 FreeTds 的库文件

将 freetds 的库文件所在路径配置到 LD_LIBRARY_PATH 参数中:

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/localfreetds/lib/:

或者直接把 etc/bashrc 的文件 bashrc 直接填写上  LD_LIBRARY_PATH=/usr/localfreetds/lib:$LD_LIBRARY_PATH

这么作的目的是为了避免加载 FreeTds 库文件加载不上的情况。

 

 

php 里安装 php-mssql 扩展:

cd /download (把php-mssql扩展下载到download目录里)
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz (下载扩展文件,这里要根据你环境中运行的php版本选择对应的扩展版本下载,我这里php是5.6.30的 所以php-mssql扩展下载对应的版本) tar -zxvf php-5.6.30.tar.gz cd /php-5.6.30/ext/mssql
 /usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/ 

make
&& make install

编译安装后的结果 如下图

 

同时 mssql.so 也在 php 扩展文件下生成 (如下图)

 

 

 

 把 extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/mssql.so"  添加到 usr/local/php/lib/php.ini 中

 引用扩展后,重启 web 服务,通过 phpinfo 查看扩展 mssql 是否开启成功

重启 php   /usr/local/php/sbin/php-fpm reload  

重启 nginx  进入 nginx 可执行目录 sbin 下,输入命令./nginx -s reload 即可(或者 /application/nginx/sbin/nginx -s reload)

 

 

 

Logstash sqlserver JDBC:AdapterNotFound: 无法加载 jdbc/mssql 适配器: 适配器类未在 ADAPTER_MAP> 中注册

Logstash sqlserver JDBC:AdapterNotFound: 无法加载 jdbc/mssql 适配器: 适配器类未在 ADAPTER_MAP> 中注册

如何解决Logstash sqlserver JDBC:AdapterNotFound: 无法加载 jdbc/mssql 适配器: 适配器类未在 ADAPTER_MAP> 中注册

我正在尝试使用 logstash 过滤器插件 jdbc_streaming

我的 logstash 版本是 7.13 操作系统 centos 7 openjdk 11.0.11 2021-04-20 LTS jdbc 6.0 : "/home/jdbc/sqljdbc_6.0/enu/jre7/sqljdbc41.jar"

我的logstash配置

  1. input {
  2. generator {
  3. lines => [
  4. "CBN00000020121","CBN00000040121"
  5. ]
  6. count => 1
  7. }
  8. }
  9. filter{
  10. csv{
  11. columns => ["noinvoice"]
  12. separator => ","
  13. }
  14. {
  15. jdbc_streaming {
  16. jdbc_driver_library => "/home/jdbc/sqljdbc_6.0/enu/jre7/sqljdbc41.jar"
  17. jdbc_driver_class => "com.microsoft.sqlserver.jdbc.sqlServerDriver"
  18. jdbc_connection_string => "jdbc:mssql://someip:1433/mydatabase"
  19. jdbc_user => "user"
  20. jdbc_password => "password"
  21. statement => "select EmailTime from TestInvoice.dbo.storing_ssis WHERE invoiceno= :noinvoice"
  22. parameters => {"noinvoice" => "noinvoice"}
  23. target => "EmailTime"
  24. }
  25. }
  26. output{
  27. stdout{codec => rubydebug}
  28. }

当我跑过/usr/share/logstash/bin/logstash -f fjdbc.conf 它返回

  1. Using bundled JDK: /usr/share/logstash/jdk
  2. OpenJDK 64-Bit Server VM warning: Option UseConcmarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
  3. WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
  4. Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
  5. [INFO ] 2021-06-10 15:55:36.686 [main] runner - Starting Logstash {"logstash.version"=>"7.13.1","jruby.version"=>"jruby 9.2.16.0 (2.5.7) 2021-03-03 f82228dc32 OpenJDK 64-Bit Server VM 11.0.11+9 on 11.0.11+9 +indy +jit [linux-x86_64]"}
  6. [WARN ] 2021-06-10 15:55:37.253 [LogStash::Runner] multilocal - Ignoring the ''pipelines.yml'' file because modules or command line options are specified
  7. [INFO ] 2021-06-10 15:55:39.668 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
  8. [INFO ] 2021-06-10 15:55:41.520 [Converge PipelineAction::Create<main>] Reflections - Reflections took 69 ms to scan 1 urls,producing 24 keys and 48 values
  9. [ERROR] 2021-06-10 15:55:43.988 [[main]-pipeline-manager] javapipeline - Pipeline error {:pipeline_id=>"main",:exception=>#<Sequel::AdapterNotFound: Could not load jdbc/mssql adapter: adapter class not registered in ADAPTER_MAP>,:backtrace=>["/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/sequel-5.44.0/lib/sequel/database/connecting.rb:97:in `load_adapter''","/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/sequel-5.44.0/lib/sequel/adapters/jdbc.rb:380:in `adapter_initialize''","/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/sequel-5.44.0/lib/sequel/database/misc.rb:154:in `initialize''","/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/sequel-5.44.0/lib/sequel/database/connecting.rb:57:in `connect''","/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/sequel-5.44.0/lib/sequel/core.rb:124:in `connect''","/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-integration-jdbc-5.0.7/lib/logstash/plugin_mixins/jdbc_streaming.rb:62:in `prepare_jdbc_connection''","/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-integration-jdbc-5.0.7/lib/logstash/filters/jdbc_streaming.rb:122:in `register''","org/logstash/config/ir/compiler/AbstractFilterDelegatorExt.java:75:in `register''","/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:228:in `block in register_plugins''","org/jruby/RubyArray.java:1809:in `each''","/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:227:in `register_plugins''","/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:586:in `maybe_setup_out_plugins''","/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:240:in `start_workers''","/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:185:in `run''","/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:137:in `block in start''"],"pipeline.sources"=>["/etc/logstash/fjdbc.conf"],:thread=>"#<Thread:0x67751750 run>"}
  10. [INFO ] 2021-06-10 15:55:43.991 [[main]-pipeline-manager] javapipeline - Pipeline terminated {"pipeline.id"=>"main"}
  11. [ERROR] 2021-06-10 15:55:44.015 [Converge PipelineAction::Create<main>] agent - Failed to execute action {:id=>:main,:action_type=>LogStash::ConvergeResult::FailedAction,:message=>"Could not execute action: PipelineAction::Create<main>,action_result: false",:backtrace=>nil}
  12. [INFO ] 2021-06-10 15:55:44.146 [LogStash::Runner] runner - Logstash shut down.

如何指定适配器类?

更新

因为我使用的是 jdk 11,所以我应该使用 jdbc 7.2.2。我也在 /root/jdbc2/sqljdbc_7.2/enu/mssql-jdbc-7.2.2.jre11.jar 中指定了路径,但它仍然返回相同的错误

更新2

我已将罐子移至 /usr/share/logstash/logstash-core/lib/jars/ 然后更改 jdbc_driver_library=>"" 它仍然返回

  1. [ERROR] 2021-06-11 17:07:46.257 [Converge PipelineAction::Create<main>] jdbcstreaming - Invalid setting for jdbc_streaming filter plugin:
  2. filter {
  3. jdbc_streaming {
  4. # This setting must be a path
  5. # File does not exist or cannot be opened
  6. jdbc_driver_library => ""
  7. ...
  8. }
  9. }

更新 3

我已经移动了罐子的路径,它是 /root/jdbc2/sqljdbc_7.2/enu/mssql-jdbc-7.2.2.jre11.jar/etc/logstash/jar/mssql-jdbc-7.2.2.jre11.jar 当我再次运行时,它返回与以下相同的错误:

  1. [ERROR] 2021-06-11 17:13:34.597 [[main]-pipeline-manager] javapipeline - Pipeline error {:pipeline_id=>"main",:thread=>"#<Thread:0x2a713d1d run>"}

更新 4

我刚刚重新下载 jdbc 7.2 为

pwd /home/

mkdir jdbc2

wget https://download.microsoft.com/download/4/D/C/4DCD85FA-0041-4D2E-8DD9-833C1873978C/sqljdbc_7.2.2.0_enu.tar.gz

gzip -d sqljdbc_7.2.2.0_enu.tar.gz

tar -xf sqljdbc_7.2.2.0_enu.tar

将其用作最终 fjdbc.conf

  1. input {
  2. generator {
  3. lines => [
  4. "CBN00000020121","CBN00000040121"
  5. ]
  6. count => 1
  7. }
  8. }
  9. filter{
  10. jdbc_streaming {
  11. # jdbc_driver_library => "/root/jdbc2/sqljdbc_7.2/enu/mssql-jdbc-7.2.2.jre11.jar"
  12. # jdbc_driver_library => "/etc/logstash/jar/mssql-jdbc-7.2.2.jre11.jar"
  13. jdbc_driver_library => "/home/jdbc2/sqljdbc_7.2/enu/mssql-jdbc-7.2.2.jre11.jar"
  14. # jdbc_driver_class => ""
  15. jdbc_driver_class => "com.microsoft.sqlserver.jdbc.sqlServerDriver"
  16. jdbc_connection_string => "jdbc:mssql://someip:1433/TestInvoice"
  17. # jdbc_user => "sa"
  18. jdbc_password => "BIDWT3st!"
  19. statement => "select EmailTime from TestInvoice.dbo.storing_ssis WHERE invoiceno= :noinvoice"
  20. parameters => {"noinvoice" => "noinvoice"}
  21. target => "EmailTime"
  22. }
  23. }
  24. output{
  25. stdout{codec => rubydebug}
  26. }

返回与更新 3 相同的错误。

更新 5

  1. 下载 jdbc 8.2 for jdk 11. 使用 mssql-jdbc-8.2.2.jre11.jar,将此 jar 复制到 /usr/share/logstash/logstash-core/lib/jars/
  2. 删除 jdbc_driver_library 行,因为我已将其复制到 logstash 的 jar 中,
  3. jdbc_connection_string 格式从 jdbc:mssql://someip:1433/mydatabase 编辑为 jdbc:sqlserver:someip:1433;databaseName=dbname;user=username;password=password"

仍然返回相同的错误。 请帮忙。谢谢

关于mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享sql将null替换成空串的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Django 连接 mssql (SqlServer)、go mssql 查询语句到实体中 ,goland 简单连接 sqlserver,并查询数据到实体中、lnmp 环境里安装 mssql 及 mssql 的 php 扩展、Logstash sqlserver JDBC:AdapterNotFound: 无法加载 jdbc/mssql 适配器: 适配器类未在 ADAPTER_MAP> 中注册的相关知识,请在本站寻找。

本文标签: