小编Zho*_*rov的帖子

如何在使用 PHP SQLSRV_QUERY 时忽略 T-SQL 打印语句

我们正在将一些 PHP 5.3 内部 API 代码转换为 PHP 7.2。转换过程的一部分是从使用 mssql_* DB API 切换到使用 sqlsrv_* DB API。我们发现的一件事是,旧的 MSSQL_EXECUTE 语句会忽略存储过程中的任何 T-SQL Print 语句,但新的 SQLSRV_QUERY 语句不会。

例如,我有以下示例存储过程:

create procedure spTestPrintStmt
  @var1 varchar(50),
  @var2 varchar(50),
  @var3 varchar(50),
  @rtn1 varchar(50) out,
  @rtn2 varchar(50) out
as
begin

  print 'Starting spTestPrintStmt...';

  print 'Vars: ' + @var1 + ',' + @var2 + ',' + @var3;

  select @rtn1 = @var1, @rtn2 = @var2 + @var3;

  print 'Returned: ' + @rtn1 + ',' + @rtn2;

  return 0;
end;
go
Run Code Online (Sandbox Code Playgroud)

我使用以下 PHP …

php sql-server sqlsrv

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

PHP7.3 SQLSRV - 查询和存储时日期时间的格式不同

我们必须升级系统以使用 PHP7.3(从 MSSQL 更改为 SQLSRV DB Driver 和带有 PDO 的 SQLSRV)

我的问题是,我不理解这种行为以及如何正确解决它。

当我从数据库查询一DateTime列时,我得到:

2019-03-26 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

当我尝试将相同的值存储到DateTime数据库的列中时,它不起作用。我的数据库接受这种格式,例如:

 26-03-2019 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

因此,我们现有的数据库层无法正常工作。

我需要帮助来理解这种行为,以及如何告诉数据库使用相同的格式进行查询和插入/更新

我们使用的查询没有特殊的转换,简单的 SELECT / UPDATE / INSERT。

PHP 版本:PHP 7.3.3-1+ubuntu18.04.1+deb.sury.org+1 (cli)(构建时间:2019 年 3 月 7 日 20:31:49)(NTS)
版权所有 (c) 1997-2018 The PHP Group Zend Engine v3.3.3,版权所有 (c) 1998-2018 Zend Technologies 与 Zend OPcache v7.3.3-1+ubuntu18.04.1+deb.sury.org+1,版权所有 (c) 1999-2018,作者:Zend Technologies

SQL服务器:MSSQL服务器2014

谢谢任何提示

php sql-server sqlsrv

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

SQL Server 中第一个实例 0 其余的变为 1

我有一个场景,其中 IFIDCodeInsertDate相同的,如果它是第一个条目,那么它将是 0,否则是 1。

演示数据:

CREATE TABLE #test 
(
     ID int,
     code int,
     InsertDate datetime2
)

Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (1,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (2,1,'2019-09-17 03:19:00.0000000')
Insert into #test values (3,1,'2019-09-17 03:19:00.0000000')
Run Code Online (Sandbox Code Playgroud)

预期产出

ID  code    InsertDate              flag   
-----------------------------------------
1    1  2019-09-17 03:19:00.0000000  0     
1    1  2019-09-17 03:19:00.0000000  1     
1    1  2019-09-17 03:19:00.0000000  1     
2    1  2019-09-17 03:19:00.0000000  0     
3    1 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2012

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

来自带有子级别的SQL查询的JSON

我的数据库中有一个简单的查询:

SELECT id, name FROM users FOR JSON AUTO, ROOT('users')
Run Code Online (Sandbox Code Playgroud)

这将返回以下JSON:

{
    "users": [
        {"id": "1", "name": "John"}
        {"id": "2", "name": "Mike"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用以下格式返回:

{
    "users": {
        "list": [
            {"id": "1", "name": "John"}
            {"id": "2", "name": "Mike"}
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在SQL级别上通过简单地更改查询来做到这一点吗?

sql-server json sql-server-json

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

DELPHI 10.3 - 循环直到按键按下小问题

大家早上好,我写了一个非常简单的应用程序,我必须等待用户按下某个键(例如 F2)才能继续处理。按下按钮的等待周期工作正常,但我需要帮助的问题是:如果在按下按钮的等待周期中,我点击了另一个应用程序,我的应用程序失去了焦点,我无法再重新获得控制权。即使我点击应用程序的任何部分,表单的标题始终保持灰色,应用程序仍然在等待按键的压力,如果我按下所需的键,显然什么也没有发生。如何重新控制我的应用程序?我想我会在 while 循环中放置诸如 SetFocus、StayOnTop、SetForegroundWindow 等指令,以始终保持我的应用程序处于活动状态,但我无法组合任何东西...

var

  Form2: TForm2;
  mkey: word; 

implementation

{$R *.dfm} 

procedure TForm2.FormActivate(Sender: TObject);

begin

  label1.Visible:= false;

  mkey:= 0;

  keyPreview:= true;

  while mkey <> VK_F2 do begin

    label1.Visible:= true;

    label1.Caption:= datetimetostr(now);   // for example

    application.ProcessMessages;

  end;

  label1.Visible:= false;

end; 

procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

  mkey:= key;

end;

end.
Run Code Online (Sandbox Code Playgroud)

delphi loops key keypress while-loop

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

创建自行重置的列

我有一列由递增的整数组成(从 1 开始,增加到 N)。我想创建第二列,从 1, 2, 3, 4 运行,然后重置并从 1, 2, 3, ... 开始,依此类推。明确表明,这就是我想要的:

1   1
2   2
3   3
4   4
5   1
6   2
7   3
8   4
9   1
10  2
11  3
12  4
13  1
14  2
15  3
... ...
Run Code Online (Sandbox Code Playgroud)

你有关于如何在 SQL 中执行此操作的提示吗?最好有完整的代码示例?

sql t-sql sql-server

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

在 SQL Server 上减去 1 年零 1 天

为了减去 1 年,我使用

SELECT DATEADD(year, -1, GETDATE())
Run Code Online (Sandbox Code Playgroud)

当天也一样。

如果我想要组合,语法是什么?

来自30/05/2020--->29/05/2019

sql-server

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

Visual Studio 代码如何集成来自 PHP Srv 驱动程序的支持

我不知道这是否是正确的问题,但我正在使用 MSSQL 和 PHP,并且刚刚安装了 PHP SqlSrv 的驱动程序。

(您需要添加 Microsoft 的扩展才能使用 MsSql,因为 PHP 不再支持 mssql_connect)

但是现在我不确定如何在 Visual Studio 代码中添加对该驱动程序的支持,它说我正在使用未定义的函数。

有什么方法可以将两者结合起来,还是我只需要满足于它的工作原理?

$serverName = "serverName\\sqlexpress"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
?>
Run Code Online (Sandbox Code Playgroud)

显示错误的图像

我用:

Windows 10、PHP 7.2.1.1、Laragon、php_pdo_sqlsrv-5.8.1-7.2-ts-vc15-x64、php_sqlsrv-5.8.1-7.2-ts-vc15-x64。

php sql-server settings driver visual-studio-code

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

SQL 字符串函数 QUOTENAME() 不给出长字符串的结果

QuoteName(i.ItemDescription,CHAR(34))当项目描述很长时,不会给出任何结果。有没有什么解决方案可以让我们保存长度超过128个字符的字符串并返回它?

sql-server

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

用于在字符串中选择电子邮件地址的 SQL 查询

我正在寻找帮助来创建 SQL 查询以从包含如下 json 对象的文本字段中提取电子邮件地址:

{"objectType":"Agent","mbox":"mailto:testuser@test.com","name":"Test User"}
Run Code Online (Sandbox Code Playgroud)

为了示例起见,我将调用 tabletblUsers和 field UserObject

我可以得到 string 之后的所有内容"mailto:",但需要在 address 之后去除 string 的其余部分。显然,地址可能并不总是以“.com”结尾。

sql sql-server json

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