我无法使用MSSQL
和PHP
执行漫长的PDO
脚本。
它包含一些由GO
分隔的批处理语句。如果脚本在Management Studio
中执行,则会运行该脚本。
我确保行结尾不会导致问题。
我还尝试在执行请求之前启用beginTransaction()
。这会返回以下错误:SQLSTATE[IMSSP]: This function is not implemented by this driver.
我正在使用IIS8
和PHP 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'
答案 0 :(得分:1)
GO
无效T-SQL
,它是SQLCMD和其他实用程序使用的命令,并在执行前进行解析。
看起来有一些选择。
1)使用OSQL /命令行执行脚本
2)在每个GO分隔符处拆分脚本,然后按顺序运行它们
3)如果使用.NET,您可以查看使用SQL Server管理对象:
Server.ConnectionContext.ExecuteNonQuery()
这解析器T-SQL语句和"得到" GO语句作为批处理分隔符。