Sql server 动态sql生成
我需要以下面指定的格式生成一个动态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
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