PHP PDO GO,MSSQL和&amp ;;附近的语法不正确sql_srv

时间:2017-01-06 11:03:13

标签: php sql-server pdo

我无法使用MSSQLPHP执行漫长的PDO脚本。

它包含一些由GO分隔的批处理语句。如果脚本在Management Studio中执行,则会运行该脚本。

我确保行结尾不会导致问题。

我还尝试在执行请求之前启用beginTransaction()。这会返回以下错误:SQLSTATE[IMSSP]: This function is not implemented by this driver.

我正在使用IIS8PHP 5.4.16以及pdo_sqlsrv驱动程序

脚本的第一部分:

USE foo;

IF object_id(N'ToBit', N'FN') IS NOT NULL
  DROP Function dbo.ToBit

GO


CREATE FUNCTION dbo.ToBit(
    @InputString varchar(250)
)
RETURNS BIT
AS BEGIN
    DECLARE @OutputBit BIT
    SET @OutputBit = CASE 
                 WHEN (@InputString = 'yes') THEN 1
                 WHEN (@InputString = 'true') THEN 1
                 WHEN (@InputString = '1') THEN 1
                 ELSE 0
              END
    RETURN @OutputBit
END

是不是司机?我看不出为什么GO需要调用beginTransaction()?除此之外,我没有想法。

更新:我想我可能在这里找到了答案。如果我找到一个soloutio将更新。 Incorrect syntax near 'GO'

1 个答案:

答案 0 :(得分:1)

Jon Galloway

找到了答案

GO无效T-SQL,它是SQLCMD和其他实用程序使用的命令,并在执行前进行解析。

看起来有一些选择。

1)使用OSQL /命令行执行脚本

2)在每个GO分隔符处拆分脚本,然后按顺序运行它们

3)如果使用.NET,您可以查看使用SQL Server管理对象: Server.ConnectionContext.ExecuteNonQuery()

这解析器T-SQL语句和"得到" GO语句作为批处理分隔符。