Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 动态sql生成_Sql Server_Sql Server 2008_Sql Server 2012_Dynamic Sql - Fatal编程技术网

Sql server 动态sql生成

Sql server 动态sql生成,sql-server,sql-server-2008,sql-server-2012,dynamic-sql,Sql Server,Sql Server 2008,Sql Server 2012,Dynamic Sql,我需要以下面指定的格式生成一个动态sql,其中我的表是一个参数,即列数不是静态的 例如,下面可能是表模式 ID Name 1 asd 2 xyz 我需要一个生成select语句的查询,如下所示 select 'ID :' + ID + ',Name :'+Name from table 上述sql生成的输出如下所示 ID:1,姓名:asd ID:2,名称:xyz 如果表的列数更多,则需要更改的select语句的变化如下所示 select 'ID :' + ID + ',Name :'+N

我需要以下面指定的格式生成一个动态sql,其中我的表是一个参数,即列数不是静态的

例如,下面可能是表模式

ID Name
1  asd
2  xyz
我需要一个生成select语句的查询,如下所示

select 'ID :' + ID + ',Name :'+Name from table
上述sql生成的输出如下所示 ID:1,姓名:asd ID:2,名称:xyz

如果表的列数更多,则需要更改的select语句的变化如下所示

select 'ID :' + ID + ',Name :'+Name + ',Col3 :' + Col3 ...from table
有人能帮我一下吗

谢谢,
Sree使用信息架构视图。它们包含生成动态sql所需的所有信息。剩下的只是简单的SQL和耐心。

这里有一个选项,它使用了一些XML和字符串操作

我应该补充一点,空值将被排除

范例


我能够使用下面的sql实现这一点

DECLARE @TableName VARCHAR(MAX) = 'tableName'
DECLARE @SQL VARCHAR(MAX) = 'SELECT ''{''+''' 

SELECT @SQL = @SQL + '
    "'+COLUMN_NAME+'":"''' + '+coalesce(CAST('+COLUMN_NAME+' AS VARCHAR(MAX)),'''')+''",' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName
SET @SQL =  LEFT(@SQL,LEN(@SQL)-1) + '
}'' FROM ' + @TableName

PRINT @SQL
谢谢,
Sree

基本上,您需要两个游标,一个用于表,另一个用于列,将它们与动态sql一起使用,使用简单的字符串连接,而不考虑任何sql注入关系。是否需要一些代码为给定的表构建select语句?您需要TSQL或某种编程语言中的代码吗?这应该让您开始:从INFORMATION_SCHEMA.COLUMNS中选择COLUMN_NAME,其中TABLE_NAME=N'tablename'是一个有趣的解决方案。如何处理转义字符,如&;?。。。还有耐心。我认为从现在起所有的答案都应该是这样的:在几份工作之前,我有一位老板称之为SMOP:简单的编程问题。虽然这可能是解决问题的一个有价值的提示,但一个好的答案也能说明解决方法。请提供示例代码来说明您的意思。另外,请考虑将此作为评论来写,然后请将此标记为回答问题的答案。单击左上角的复选标记。
(No column name)
ID:1,Name:asd,ID:2,Name:xyz
DECLARE @TableName VARCHAR(MAX) = 'tableName'
DECLARE @SQL VARCHAR(MAX) = 'SELECT ''{''+''' 

SELECT @SQL = @SQL + '
    "'+COLUMN_NAME+'":"''' + '+coalesce(CAST('+COLUMN_NAME+' AS VARCHAR(MAX)),'''')+''",' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName
SET @SQL =  LEFT(@SQL,LEN(@SQL)-1) + '
}'' FROM ' + @TableName

PRINT @SQL