我正在尝试创建一个函数/storedprocedure,无论何时使用params tablename和index调用它。它将返回如下字符串:
id=2, detail=car repair, concluded=1, bill=No, applicant=others, fk_boxId=1
最简单的方法是:
select Concat('id=', id, ', detail=', detail, ', concluded=', concluded, ', bill=', bill, ', applicant=', applicant, ', fk_boxId=' ,fk_boxId)
FROM [CashBox].[dbo].[Concepts]
where id = 2
但我希望能够发送任何表,而不必每次添加列时都修改函数。
我不知道是否已经有一个函数或库已经这样做了。我寻找它没有运气。
说这话。我开始自己编写函数。但我有点卡住了。这就是我的想法。。。
功能:
CREATE FUNCTION [dbo].[getColumnValue](@tableName varchar(255), @column varchar(255), @rowIndex int)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @ret VARCHAR(255)
DECLARE @primaryKey NVARCHAR(255) = (SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName)
DECLARE @SQL NVARCHAR(4000) = N'SELECT @column FROM @tableName WHERE @primaryKey=@rowIndex'
DECLARE @PARAMS NVARCHAR(500);
SET @PARAMS = N'@column varchar(255), @tableName varchar(255), @primaryKey varchar(255), @rowIndex int, @ret varchar(255) OUTPUT';
exec sp_executesql @SQL, @PARAMS, @column, @primaryKey, @rowIndex, @tableName, @ret output;
RETURN @ret
END
电话:
--PARAMS FOR TESTING
DECLARE @rowIndex varchar(500) = '1'
DECLARE @tableName varchar(500) = 'Concepts'
DECLARE @result varchar(500) = ''
SELECT @result = @result + COLUMN_NAME + '=' + dbo.getColumnValue(@tableName, COLUMN_NAME, @rowIndex) + ', '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName
SELECT @result
错误消息:(这发生在函数内部)
Must declare the table variable "@tableName".
即使我尝试用硬编码的变量运行函数,结果也是空的,我也害怕我没有正确调用sp\u executesql func,或者查询有我看不到的逻辑问题。我不明白我想做什么。
提前谢谢。这是我第一次提出一个问题,我尽量把问题说清楚。
1条答案
按热度按时间68bkxrlz1#
您是否考虑过将xml或json用于行集合?
例子