【发布时间】:2021-04-26 06:08:59
【问题描述】:
我收到了这个错误
消息 103010,第 16 级,状态 1,第 1 行
解析错误在第 33 行,第 15 列:'@sas_token' 附近的语法不正确
以下是我正在关注的指南供参考:
我尝试了注释部分,因为我认为它无法识别引号,但它仍然不起作用
CREATE PROCEDURE dbo.bulk_load
@sas_token VARCHAR(500)
AS
BEGIN
--DECLARE @sas varchar(500)
--SET @sas = ''''+ @sas_token + ''''
IF OBJECT_ID('dbo.ITEM_INFORMATION') IS NOT NULL
DROP TABLE dbo.ITEM_INFORMATION;
CREATE TABLE dbo.ITEM_INFORMATION
(
model VARCHAR(20),
col1 VARCHAR(15),
col2 VARCHAR(3),
col3 VARCHAR(255)
);
COPY INTO dbo.ITEM_INFORMATION
FROM 'https://server.blob.core.windows.net/container/subfolder/file.csv'
WITH (FILE_TYPE = 'CSV',
FIRSTROW = 2,
CREDENTIAL = (
IDENTITY = 'Shared Access Signature',
SECRET = @sas_token --@sas also tried '''' + @sas_token + ''''
)
);
END
这个过程将像这样从 Python 中调用:
def update_database(sas_token):
#Runs the stored procedure to load the data from Azure storage to table.
#Uses the password stored in user environment variable.
server = 'server.database.windows.net'
database = 'database'
username = 'username'
if 'server_password' not in os.environ:
print("Missing environment variable 'server_password' containing database password.")
password = os.getenv('server_password')
driver= '{ODBC Driver 17 for SQL Server}'
sql = f'EXEC dbo.bulk_load, {sas_token};'
connection = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
connection.autocommit = True
connection.execute(sql)
connection.close()
【问题讨论】:
-
你如何调用这个过程?
-
你应该去掉第一行中包含
@sas_token参数定义的括号 -
SECRET好像不能通过参数设置,必须硬编码...?
-
@rs 我将通过 python 使用 pyodbc 调用此过程。问题是程序一开始就没有创建。 SAS 令牌将每 90 天更改一次,我将它存储在环境变量中,然后从 python 中读取它,然后传递给该过程并调用。
-
你能粘贴你看到的完整错误,包括行号和所有内容吗?
标签: sql tsql azure-synapse