我正在尝试学习SQL,为了演示目的,我想创建一个迭代函数参数的循环。例如。我想迭代SERVERPROPERTY函数参数(propertynames)。我可以像这样单选:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('Edition') AS Edition,
SERVERPROPERTY('EngineEdition') AS EngineEdition;
GO
但是如何迭代这个内置函数的所有属性名?提前谢谢。
答案 0 :(得分:0)
据我所知,我认为你不能这样做。它是一个具有设置PropertyNames的系统函数,以获取特定的详细信息。
HTH
答案 1 :(得分:0)
我不认为这是一种内置的方式,但请看看这是否符合您的要求:http://www.sqlservercentral.com/scripts/Replication/31229/
答案 2 :(得分:0)
您可以使用INFORMATION_SCHEMA.PARAMETERS查看用户创建的对象的参数。
然而SERVERPROPERTY
不会出现在那里。但是,您要求的不是迭代参数,而是迭代propertyname
的{{1}}参数的实际值。
SERVERPROPERTY
这些值已记录在案,并且在您安装了另一个版本的SQL Server之前不应更改,因此硬编码并在此处创建光标:
SERVERPROPERTY ( propertyname )
输出:
SELECT SERVERPROPERTY('ProductVersion') AS Value , 'ProductVersion' as TypeOf
UNION ALL SELECT SERVERPROPERTY('ProductLevel') , 'ProductLevel'
UNION ALL SELECT SERVERPROPERTY('Edition') , 'Edition'
UNION ALL SELECT SERVERPROPERTY('EngineEdition') , 'EngineEdition'
答案 3 :(得分:0)
我认为在SQL Server中的某处有一个有效的SERVERPROPERTY属性表,但您只需在应用程序中添加一个。这个例程创建一个表变量,填充它并生成动态SQL,根据需要生成一个包含列的行,并将事物转换为它们的基础类型。
SET NOCOUNT ON
DECLARE @props AS TABLE
(
propname VARCHAR(255)
,datatype VARCHAR(50)
) ;
INSERT INTO @props
VALUES (
'ProductVersion'
,'nvarchar(128)'
) ;
INSERT INTO @props
VALUES (
'ProductLevel'
,'nvarchar(128)'
) ;
INSERT INTO @props
VALUES (
'Edition'
,'nvarchar(128)'
) ;
INSERT INTO @props
VALUES (
'EngineEdition'
,'int'
) ;
DECLARE @sql AS VARCHAR(MAX) ;
SELECT @sql = ( SELECT ', CAST(SERVERPROPERTY(''' + propname + ''') AS '
+ datatype + ') AS ' + propname
FROM @props
FOR
XML PATH('')
) ;
SET @sql = 'SELECT' + STUFF(@sql, 1, 1, '') + ';' ;
PRINT @sql ;
EXEC ( @sql
) ;
SELECT @sql = ( SELECT ' UNION ALL SELECT ''' + propname
+ ''' AS PropertyName, SERVERPROPERTY(''' + propname
+ ''') AS PropertyValue'
FROM @props
FOR
XML PATH('')
) ;
SET @sql = STUFF(@sql, 1, LEN(' UNION ALL '), '') + ';' ;
PRINT @sql ;
EXEC ( @sql
) ;
我已在此示例中以列和行生成它。
答案 4 :(得分:0)
您可以使用光标执行此操作(标记为):
/* put props in a table */
DECLARE @T TABLE (PROP VARCHAR(128))
INSERT @T
SELECT 'ProductVersion'
union select 'ProductLevel'
union select 'Edition'
union select 'EngineEdition'
/* iterate */
DECLARE Cur CURSOR FAST_FORWARD FOR SELECT PROP FROM @T
DECLARE @PROP VARCHAR(128)
OPEN Cur
FETCH NEXT FROM Cur INTO @PROP
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @PROP + ' is ' + CAST(SERVERPROPERTY(@PROP) AS VARCHAR(128))
FETCH NEXT FROM Cur INTO @PROP
END
CLOSE Cur
DEALLOCATE Cur
或者你有@T
SELECT PROP + ' is ' + CAST(SERVERPROPERTY(PROP) AS VARCHAR(128)) FROM @T