我試圖將一個變數傳遞給@date我的 T-SQL 命令(在 Synapse 的 DB 中)。我想要它做的是按用戶定義的給定日期從表中洗掉資料。
這是我的腳本,當我在其中定義日期時,它運行良好:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [DPIT].[proc_nhs_delete_by_date] @date datetime, @TableName sysname AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON
DECLARE @SchemaName sysname;
SET @SchemaName = N'DPIT';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'DELETE FROM ' QUOTENAME(@SchemaName) N'.' QUOTENAME(@TableName) N' WHERE datum = @date;';
EXEC sys.sp_executesql @SQL, N'@date datetime', @date
END
但是當我執行這個存盤程序并將引數傳遞給它時,我收到以下錯誤:
Parse error at line: 3, column: 1: Incorrect syntax near 'EXEC'.
這是產生錯誤的代碼:
DECLARE @return_value int
EXEC @return_value = [DPIT].[proc_nhs_delete_by_date]
@date = N'20231021',
@TableName = sluzba_G
SELECT 'Return Value' = @return_value
GO
你知道問題可能出在哪里嗎?我傾向于相信問題在于 Synapse 可能不支持 EXEC 命令,我將不得不以sys.sp_executesql某種方式使用,但老實說,我不知道如何使用。
非常感謝您的幫助!
uj5u.com熱心網友回復:
除了動態 SQL,您遇到的問題是工具。您不能在 Synapse 專用 SQL 池(SQW 資料倉庫)中使用 return 以默認 SSMS 方式呼叫存盤程序。
改變這個:
DECLARE @return_value int
EXEC @return_value = [DPIT].[proc_nhs_delete_by_date]
@date = N'20231021',
@TableName = sluzba_G
SELECT 'Return Value' = @return_value
GO
對此:
EXEC [DPIT].[proc_nhs_delete_by_date]
@date = N'20231021',
@TableName = sluzba_G
它應該可以正常作業。
uj5u.com熱心網友回復:
@Larnu 的評論需要強調:
當物件的名稱是靜態的時,為什么在這里使用“動態”SQL;您為變數分配一個靜態值。不需要這個邏輯
你的代碼非常復雜和可怕(動態 SQL 應該讓每個人都害怕!)。
您的代碼可以簡化為:
ALTER PROCEDURE DPIT.proc_nhs_delete_by_date (
@date datetime
)
AS
BEGIN
SET NOCOUNT ON;
DELETE
FROM dbo.some_table
WHERE datum = @date
;
END
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361936.html
標籤:查询语句 参数传递 天蓝色突触 azure-sql-数据仓库
上一篇:其余控制器測驗中未執行該請求
