-->

访问-SQL传递查询(创建SP)错误(access-SQL pass-through query (

2019-06-27 14:14发布

我试图在SQL Server 2012中使用传递查询来创建存储过程,使用的MS Access 2010。

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'SCHtest') 
EXECUTE sp_executesql N'create schema SCHtest'
GO
CREATE PROCEDURE [SCHtest].[SQLLrtest_2]
AS
BEGIN
INSERT INTO [dbo].[UploadTest] (.....)

在访问我得到这个错误:

Run time error '3146':
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax nera 'GO'. (#102)
[Microsoft][ODBC SQL Server Driver][SQL Server]'CREATE/ALTER PROCEDURE' must be 
the first statement in a query batch. (#111)

如果我的代码复制粘贴到SQL服务器 - 一切工作就好了!

因为它是写在错误,如果我删除IF语句和GO,工作在Access和SQL。 如何使它不删除IF语句工作?

任何帮助,不胜感激!

埃德加

Answer 1:

如何设置是这样的:

IF NOT EXISTS (SELECT *
               FROM   sys.schemas
               WHERE  name = N'testx')
  EXECUTE Sp_executesql
    N'create schema testx'

DECLARE @sql VARCHAR(max)

SELECT @sql = '
CREATE PROCEDURE testx
AS
INSERT INTO [dbo].[table_1] (atext) values (''abc'') '

EXEC (@sql)
EXEC Testx 

参考: http://ask.sqlservercentral.com/questions/4420/alternative-to-go-for-batching-sql-statements.html

经测试,在MS Access 2010中



Answer 2:

GO不是TSQL语句是SSMS的命令。 只要你从MSACCESS执行查询你不能使用GO

所以,你唯一的选择就是分裂您的查询,单独执行它们。
EDITED Actualy,不是唯一的选择,看到Remou的答案。

另外,我不认为这是通过MSACCESS创造过程是一个好主意。 至少它是不是方便。 也许,你最好问如何解决这迫使你通过MSACCESS创建程序原来的问题?

希望这可以帮助。



文章来源: access-SQL pass-through query (creating SP) error