gpt4 book ai didi

sql - 我可以使用变量作为 CREATE SERVER AUDIT 语句的选项 AUDIT_GUID 的值吗?

转载 作者:行者123 更新时间:2023-12-04 14:18:00 28 4
gpt4 key购买 nike

我试图通过在 SQL 中使用 NEWID() 函数使 CREATE SERVER AUDIT 命令中的 Audit_GUID 值动态化。下面是我执行此操作的 SQL 脚本:

USE [master]
GO

DECLARE @newGUID as uniqueidentifier

SET @newGUID = NEWID()

CREATE SERVER AUDIT Audit_Select_Queries -- Name of the Audit(unique for a Server)
TO FILE
( FILEPATH = N'XXXX' -- Folder to Store Audit Files at
,MAXSIZE = 0 MB -- 0 = UNLIMITED
,MAX_ROLLOVER_FILES = 2147483647 -- Max possible number of Files
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000 -- Delay Audit actions by this time for completion
,ON_FAILURE = CONTINUE -- Database operation is more important than Audit
,AUDIT_GUID = @newGUID -- UUID of the Audit (unique for a server)
)
ALTER SERVER AUDIT Audit_Select_Queries WITH (STATE = OFF)
GO

但我在@newGUID 附近收到语法错误,提示“'@newGUID' 附近的语法不正确”请让我知道我做错了什么。

编辑:我正在使用 Microsoft SQL Server 2012

最佳答案

没有...

CREATE SERVER AUDIT是一个语句——所以 AUDIT_GUID 不是一个“参数”,就像存储过程的 SQL Server 参数是一个参数一样。如果您熟悉其他语言,您可以将 CREATE SERVER AUDIT 视为一种“特殊形式”,因此,您只需要记住它不接受该选项的变量。

我能理解为什么这令人困惑,例如 BACKUP语句确实允许某些“参数”(“选项”)的变量,即数据库的名称;例如这是完全有效的 T-SQL:

DECLARE @databaseName nvarchar = "insert_name_of_database_here";

BACKUP DATABASE databaseName
...

要弄清楚这些类型的问题,如果您不记得某些参数或选项是否接受变量,请查阅Microsoft 相关版本的SQL Server 文档。 [您可以通过突出显示语句、内置过程等并在键盘上按 F1 轻松地从 SSMS 打开相关文档。]

但是如果您愿意动态生成 T-SQL ...

这是使用动态 SQL 的方法 – 通过 EXECUTEsp_executesql – 做你想做的事:

DECLARE @dynamicSql nvarchar(1000);

SELECT @dynamicSql = 'CREATE SERVER AUDIT
...
AUDIT_GUID = ''' + CAST(@newGUID AS nvarchar(255)) + ''''
+ '...' + ...,

EXEC sp_executesql @dynamicSql;

关于sql - 我可以使用变量作为 CREATE SERVER AUDIT 语句的选项 AUDIT_GUID 的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706409/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com