Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有MSSQL Insert NULL错误的PHP_Php_Sql_Sql Server_Database_Tsql - Fatal编程技术网

带有MSSQL Insert NULL错误的PHP

带有MSSQL Insert NULL错误的PHP,php,sql,sql-server,database,tsql,Php,Sql,Sql Server,Database,Tsql,我正试图将PHP与Microsoft SQL Server 2008 R2结合使用,这让我想死。我有一个存储过程,可以通过在Mac上的终端上运行的FreeTDS完美地工作,在Visual Studio中完美地工作,在FrontPage服务器上通过ASP.NET完美地工作。然而,它在Ubuntu web服务器上通过PHP5.3.2失败得很惨。在这个过程中,我设置了几个临时表,并从一个巨大的表中插入它们,该表总是在这里和那里包含一些空值。我得到的错误是 Cannot insert the value

我正试图将PHP与Microsoft SQL Server 2008 R2结合使用,这让我想死。我有一个存储过程,可以通过在Mac上的终端上运行的FreeTDS完美地工作,在Visual Studio中完美地工作,在FrontPage服务器上通过ASP.NET完美地工作。然而,它在Ubuntu web服务器上通过PHP5.3.2失败得很惨。在这个过程中,我设置了几个临时表,并从一个巨大的表中插入它们,该表总是在这里和那里包含一些空值。我得到的错误是

Cannot insert the value NULL into column 'Notes', table 'tempdb.dbo.#termtable1__00000000BE0B'; column does not allow nulls. INSERT fails.
只有10亿个下划线。有人将此作为bug发布,但并未引起太多关注。我最好的尝试是在每个临时表的每一列上指定一个NULL约束,但没有帮助。还尝试将ANSI_null设置为ON。就补丁程序和驱动程序而言,我没有太多的权限访问这些服务器,也没有太多的权限访问这些服务器的用户。我不认为他们会想做很多事情来帮助我,但如果有人有一个真正好的主意,我会尽力把它完成。哦,还有,应该注意的是,在SquirrelSQL中通过Microsoft JDBC驱动程序执行的相同过程会给出奇怪的、半正确的结果。谢谢

编辑:

我修复了链接,实际上只是复制并粘贴了错误的URL。这里是声明临时表的T-SQL。我试着在每个数据类型后面加上NULL。就这样有五个

创建表termtable1 序列号varchar50,SR varchar50,租赁varchar50,部件varchar50, 基金int,组织int,计划varchar50,名字varchar80,姓氏varchar30, 部门varchar50,位置varchar50,用户ID nvarchar20,注释nvarcharMAX, 制造商varchar50,型号varchar50,维护位,订单号varchar50, 合同编号varchar50,父标签varchar50; 它们通过动态SQL插入,这就是为什么我不能使用表变量来代替作用域问题:

声明@sqlstring-nvarcharMAX; 声明@params nvarchar200=N'@term1 varchar100、@term2 varchar100、@term3 varchar100、@term4 varchar100、@term5 varchar100'; 为SELECT*FROM@terms声明qryCursor游标; 开放式qryCursor; 从qryCursor获取下一个到@term1、@term2、@term3、@term4、@term5; 声明@termrrow int=1; 而@@FETCH\u STATUS=0 开始 SET@sqlstring=N'INSERT INTO termtable'+CAST@termrow作为varchar+N'SELECT*FROM dbo.NewUserInfo WHERE'; 声明@i int=1;
虽然@i好的,伙计们,我很抱歉。在每个数据类型之后设置NULL确实有效。我第一次试的时候一定错过了几次。表声明应如下所示:

创建表termtable1 SerialNumber varchar50 NULL、SR varchar50 NULL、LeaseTag varchar50 NULL、组件varchar50 NULL、, 基金int NULL,组织int NULL,程序varchar50 NULL,FirstName varchar80 NULL,LastName varchar30 NULL, 部门varchar50 NULL,位置varchar50 NULL,用户ID varchar20 NULL,Notes varcharMAX NULL, 制造商varchar50 NULL,型号varchar50 NULL,维护位NULL,订单号varchar50 NULL, ContractNumber varchar50 NULL,ParentTag varchar50 NULL;
如果创建临时表,将使用SELECT。。。INTO语句,则可以确保它将匹配NewUserInfo表的列,即使您延迟对该表进行更改

 SET @sqlstring = N'SELECT * FROM dbo.NewUserInfo INTO #termtable' + CAST(@termrow AS varchar) + N' WHERE 1=0';

如果需要输入,则需要显示存储过程的代码,至少显示创建和填充termtable1的部分,以及如何从PHP调用该过程。你可能还想详细说明你所说的奇怪的、半正确的结果,尽管可能是在一个不同的问题中。听起来你有不止一个问题。你的链接受密码保护。不管怎样,没有一行PHP或T-SQL代码是很难帮助你的。听起来你需要一个黑客-有可能不使用临时表吗?更新了大量代码和更多细节。谢谢大家。